Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 27 additions & 1 deletion app/.gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,27 @@
/build
# Built application files
/*/build/

# Crashlytics configuations
com_crashlytics_export_strings.xml

# Local configuration file (sdk path, etc)
local.properties

# Gradle generated files
.gradle/

# Signing files
.signing/

# User-specific configurations
.idea/
*.iml

# OS-specific files
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
14 changes: 10 additions & 4 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
package="io.github.davidbuchanan314.nxloader">

<uses-permission android:name="android.permission.REORDER_TASKS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

<application
android:allowBackup="true"
Expand All @@ -11,28 +12,33 @@
android:roundIcon="@mipmap/ic_launcher"
android:supportsRtl="true"
android:theme="@style/AppTheme">

<activity
android:name=".MainActivity"
android:configChanges="orientation|screenSize"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="io.github.davidbuchanan314.LOG_UPDATE" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<activity
android:name=".USBHandlerActivity"
android:excludeFromRecents="true"
android:exported="false"
android:label="( ͡° ͜ʖ ͡°)"
android:noHistory="true"
android:excludeFromRecents="true"
android:taskAffinity="com.example.taskAffinityUsbEventReceiver"
android:process=":UsbEventReceiverActivityProcess"
android:exported="false"
android:taskAffinity="com.example.taskAffinityUsbEventReceiver"
android:theme="@style/invisibleTheme">
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>
<meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
<meta-data
android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
android:resource="@xml/device_filter" />
</activity>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import android.view.ViewGroup;
import android.widget.TextView;

import io.github.davidbuchanan314.nxloader.utils.Utils;

public class FragmentAbout extends Fragment {
public FragmentAbout() {
// Required empty public constructor
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package io.github.davidbuchanan314.nxloader;

import android.Manifest;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.Service;
Expand All @@ -8,8 +9,10 @@
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
Expand All @@ -25,9 +28,13 @@
import java.util.ArrayList;
import java.util.List;

import io.github.davidbuchanan314.nxloader.utils.PermissionsUtils;
import io.github.davidbuchanan314.nxloader.utils.Utils;

public class MainActivity extends AppCompatActivity {

private static final int READ_REQUEST_CODE = 42;

private FragmentLogs logFragment;
BroadcastReceiver myReceiver;

Expand Down Expand Up @@ -61,6 +68,14 @@ protected void onDestroy() {

// primary payload selection button
public void onConfigPrimaryPayloadClick(View view) {
if (!PermissionsUtils.checkPermissionGranted(this, Manifest.permission.READ_EXTERNAL_STORAGE)) {
PermissionsUtils.showPermissionDialog(this);
} else {
getPayloadFromStorage();
}
}

private void getPayloadFromStorage() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
Expand Down Expand Up @@ -102,6 +117,17 @@ public void onActivityResult(int requestCode, int resultCode, Intent resultData)
}
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case PermissionsUtils.PERMISSIONS_REQUEST_CODE:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
getPayloadFromStorage();
} else {
Toast.makeText(this, R.string.permission_storage_error, Toast.LENGTH_SHORT).show();
}
}
}

// Adapter for the viewpager using FragmentPagerAdapter
// http://www.gadgetsaint.com/android/create-viewpager-tabs-android/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
import java.nio.ByteBuffer;
import java.nio.ByteOrder;

import io.github.davidbuchanan314.nxloader.utils.Utils;

public class PrimaryLoader implements USBDevHandler {
private static final int RCM_PAYLOAD_ADDR = 0x40010000;
private static final int INTERMEZZO_LOCATION = 0x4001F000;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package io.github.davidbuchanan314.nxloader.utils;

import android.Manifest;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AlertDialog;

import io.github.davidbuchanan314.nxloader.R;

public class PermissionsUtils {

public static final int PERMISSIONS_REQUEST_CODE = 125;

private static void requestPermissions(Activity activity, String[] permissions) {
ActivityCompat.requestPermissions(activity, permissions, PERMISSIONS_REQUEST_CODE);
}

public static boolean checkPermissionGranted(Activity activity, String permission) {
int result = ContextCompat.checkSelfPermission(activity, permission);
return result == PackageManager.PERMISSION_GRANTED;
}

public static void showPermissionDialog(Activity activity) {
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setTitle(R.string.permission_storage_dialog_title);
builder.setMessage(R.string.permission_storage_dialog_description);

AlertDialog storagePermissionDialog = builder.create();
storagePermissionDialog.setButton(AlertDialog.BUTTON_POSITIVE, activity.getString(R.string.permission_storage_button), (dialogInterface, i) -> {
storagePermissionDialog.dismiss();
requestPermissions(activity, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE});
});

storagePermissionDialog.show();
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.github.davidbuchanan314.nxloader;
package io.github.davidbuchanan314.nxloader.utils;

import android.content.Context;
import android.content.Intent;
Expand Down
Loading