diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 2996d53..674414f 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -1,13 +1,19 @@ + diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..a5f05cd --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 6e0318f..1a31439 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,13 +2,13 @@ apply plugin: 'com.android.application' android { compileSdkVersion 29 - buildToolsVersion "29.0.0" + buildToolsVersion "29.0.2" defaultConfig { applicationId "com.blogspot.developersu.ns_usbloader" minSdkVersion 15 targetSdkVersion 29 - versionCode 2 - versionName "0.2" + versionCode 3 + versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" android.defaultConfig.vectorDrawables.useSupportLibrary = true } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c8d8912..aaba7f9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -18,6 +18,8 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" + android:resizeableActivity="true" + android:supportsPictureInPicture="true" tools:ignore="GoogleAppIndexingWarning"> - - - - - (); usbDevice = getIntent().getParcelableExtra(UsbManager.EXTRA_DEVICE); // If it's started initially, then check if it's started from notification. + //Log.i("LPR", "DEVICE " +usbDevice); if (usbDevice != null){ UsbManager usbManager = (UsbManager) getSystemService(Context.USB_SERVICE); // If somehow we can't get system service @@ -419,7 +425,7 @@ public class MainActivity extends AppCompatActivity implements NsResultReciever. if (shouldBlock) { selectBtn.setEnabled(false); recyclerView.suppressLayout(true); - uploadToNsBtn.setCompoundDrawablesWithIntrinsicBounds(null, getResources().getDrawable(R.drawable.ic_cancel), null, null); + uploadToNsBtn.setCompoundDrawablesWithIntrinsicBounds(null, ContextCompat.getDrawable(this, R.drawable.ic_cancel), null, null); uploadToNsBtn.setText(R.string.interrupt_btn); uploadToNsBtn.setOnClickListener(e -> stopService(new Intent(this, CommunicationsService.class))); progressBarMain.setVisibility(ProgressBar.VISIBLE); @@ -429,7 +435,7 @@ public class MainActivity extends AppCompatActivity implements NsResultReciever. } selectBtn.setEnabled(true); recyclerView.suppressLayout(false); - uploadToNsBtn.setCompoundDrawablesWithIntrinsicBounds(null, getResources().getDrawable(R.drawable.ic_upload_btn), null, null); + uploadToNsBtn.setCompoundDrawablesWithIntrinsicBounds(null, ContextCompat.getDrawable(this, R.drawable.ic_upload_btn), null, null); uploadToNsBtn.setText(R.string.upload_btn); uploadToNsBtn.setOnClickListener(e -> this.uploadFiles() ); progressBarMain.setVisibility(ProgressBar.INVISIBLE); diff --git a/app/src/main/java/com/blogspot/developersu/ns_usbloader/NsBroadcastReceiver.java b/app/src/main/java/com/blogspot/developersu/ns_usbloader/NsBroadcastReceiver.java index 25ae92c..29a9962 100644 --- a/app/src/main/java/com/blogspot/developersu/ns_usbloader/NsBroadcastReceiver.java +++ b/app/src/main/java/com/blogspot/developersu/ns_usbloader/NsBroadcastReceiver.java @@ -1,74 +1,24 @@ package com.blogspot.developersu.ns_usbloader; -import android.app.NotificationChannel; -import android.app.NotificationManager; -import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; -import android.hardware.usb.UsbDevice; -import android.hardware.usb.UsbManager; -import android.os.Build; import android.widget.Toast; -import androidx.core.app.NotificationCompat; -import androidx.core.app.NotificationManagerCompat; - public class NsBroadcastReceiver extends BroadcastReceiver { @Override public synchronized void onReceive(Context context, Intent intent) { if (intent.getAction() == null) return; - switch (intent.getAction()) { - case UsbManager.ACTION_USB_DEVICE_ATTACHED: { - showNotification(context, intent.getParcelableExtra(UsbManager.EXTRA_DEVICE)); - break; + if (intent.getAction().equals(NsConstants.SERVICE_TRANSFER_TASK_FINISHED_INTENT)){ + String issues = intent.getStringExtra("ISSUES"); + if (issues != null) { + Toast.makeText(context, context.getString(R.string.transfers_service_stopped) + " " + issues, Toast.LENGTH_LONG).show(); + return; } - case UsbManager.ACTION_USB_DEVICE_DETACHED: { - hideNotification(context); - break; - } - case NsConstants.SERVICE_TRANSFER_TASK_FINISHED_INTENT: - String issues = intent.getStringExtra("ISSUES"); - if (issues != null) { - Toast.makeText(context, context.getString(R.string.transfers_service_stopped) + " " + issues, Toast.LENGTH_LONG).show(); - break; - } - Toast.makeText(context, context.getString(R.string.transfers_service_stopped), Toast.LENGTH_SHORT).show(); - break; + Toast.makeText(context, context.getString(R.string.transfers_service_stopped), Toast.LENGTH_SHORT).show(); } } - - private void showNotification(Context context, UsbDevice usbDevice){ - NotificationCompat.Builder notification = new NotificationCompat.Builder(context, NsConstants.NOTIFICATION_NS_CONNECTED_CHAN_ID); - notification.setSmallIcon(R.drawable.ic_notification) - .setContentTitle(context.getString(R.string.ns_connected_info)) - //.setAutoCancel(true) - .setOngoing(true) // Prevent swipe-notification-to-remove - .setPriority(NotificationCompat.PRIORITY_DEFAULT) - .setContentIntent(PendingIntent.getActivity(context, 0, new Intent(context, MainActivity.class).putExtra(UsbManager.EXTRA_DEVICE, usbDevice), 0)); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - CharSequence notificationChanName = context.getString(R.string.notification_chan_name_usb); - String notificationChanDesc = context.getString(R.string.notification_chan_desc_usb); - - NotificationChannel channel = new NotificationChannel( - NsConstants.NOTIFICATION_NS_CONNECTED_CHAN_ID, - notificationChanName, - NotificationManager.IMPORTANCE_DEFAULT); - channel.setDescription(notificationChanDesc); - // Register the channel with the system; you can't change the importance - // or other notification behaviors after this - NotificationManager notificationManager = context.getSystemService(NotificationManager.class); - notificationManager.createNotificationChannel(channel); - notificationManager.notify(NsConstants.NOTIFICATION_NS_CONNECTED_ID, notification.build()); - } - else { - NotificationManagerCompat.from(context).notify(NsConstants.NOTIFICATION_NS_CONNECTED_ID, notification.build()); - } - } - - private void hideNotification(Context context){ - NotificationManagerCompat.from(context).cancel(NsConstants.NOTIFICATION_NS_CONNECTED_ID); - } + // .setContentIntent(PendingIntent.getActivity(context, 0, new Intent(context, MainActivity.class).putExtra(UsbManager.EXTRA_DEVICE, usbDevice), 0)); } \ No newline at end of file diff --git a/app/src/main/java/com/blogspot/developersu/ns_usbloader/NsConstants.java b/app/src/main/java/com/blogspot/developersu/ns_usbloader/NsConstants.java index 642fe30..55c2d7b 100644 --- a/app/src/main/java/com/blogspot/developersu/ns_usbloader/NsConstants.java +++ b/app/src/main/java/com/blogspot/developersu/ns_usbloader/NsConstants.java @@ -23,7 +23,4 @@ public class NsConstants { public static final String NOTIFICATION_FOREGROUND_SERVICE_CHAN_ID = "com.blogspot.developersu.ns_usbloader.CHAN_ID_FOREGROUND_SERVICE"; public static final int NOTIFICATION_TRANSFER_ID = 1; - - public static final String NOTIFICATION_NS_CONNECTED_CHAN_ID = "com.blogspot.developersu.ns_usbloader.CHAN_ID_NS_CONNECTED"; - public static final int NOTIFICATION_NS_CONNECTED_ID = 2; } diff --git a/app/src/main/java/com/blogspot/developersu/ns_usbloader/NsNotificationPopUp.java b/app/src/main/java/com/blogspot/developersu/ns_usbloader/NsNotificationPopUp.java index 613c6b2..ef6eb25 100644 --- a/app/src/main/java/com/blogspot/developersu/ns_usbloader/NsNotificationPopUp.java +++ b/app/src/main/java/com/blogspot/developersu/ns_usbloader/NsNotificationPopUp.java @@ -5,9 +5,9 @@ import android.content.Context; import android.content.DialogInterface; public class NsNotificationPopUp { - public static void getAlertWindow(Context context, String titile, String message){ + public static void getAlertWindow(Context context, String title, String message){ AlertDialog.Builder builder = new AlertDialog.Builder(context); - builder.setTitle(titile) + builder.setTitle(title) .setMessage(message) .setCancelable(false) .setPositiveButton("OK", new DialogInterface.OnClickListener() { diff --git a/app/src/main/java/com/blogspot/developersu/ns_usbloader/view/NspItemsAdapter.java b/app/src/main/java/com/blogspot/developersu/ns_usbloader/view/NspItemsAdapter.java index 6e0e493..b1f76bd 100644 --- a/app/src/main/java/com/blogspot/developersu/ns_usbloader/view/NspItemsAdapter.java +++ b/app/src/main/java/com/blogspot/developersu/ns_usbloader/view/NspItemsAdapter.java @@ -13,6 +13,7 @@ import com.blogspot.developersu.ns_usbloader.R; import java.util.ArrayList; import java.util.Collections; +import java.util.Locale; public class NspItemsAdapter extends RecyclerView.Adapter { private ArrayList mDataset; @@ -44,11 +45,11 @@ public class NspItemsAdapter extends RecyclerView.Adapter 1) - return String.format("%.2f", byteSize/1024.0/1024.0/1024.0)+" GB"; + return String.format(Locale.getDefault(), "%.2f", byteSize/1024.0/1024.0/1024.0)+" GB"; else if (byteSize/1024.0/1024.0 > 1) - return String.format("%.2f", byteSize/1024.0/1024.0)+" MB"; + return String.format(Locale.getDefault(), "%.2f", byteSize/1024.0/1024.0)+" MB"; else - return String.format("%.2f", byteSize/1024.0)+" kB"; + return String.format(Locale.getDefault(), "%.2f", byteSize/1024.0)+" kB"; } public NSPElement getData(){ diff --git a/app/src/main/res/drawable/ic_file_select_file.xml b/app/src/main/res/drawable/ic_select_file.xml similarity index 100% rename from app/src/main/res/drawable/ic_file_select_file.xml rename to app/src/main/res/drawable/ic_select_file.xml diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 081341f..8aa408f 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -22,8 +22,4 @@ app:headerLayout="@layout/nav_header_main" app:menu="@menu/activity_main_drawer" /> - - \ No newline at end of file diff --git a/app/src/main/res/layout/content_main.xml b/app/src/main/res/layout/content_main.xml index 13076d8..042ef7a 100644 --- a/app/src/main/res/layout/content_main.xml +++ b/app/src/main/res/layout/content_main.xml @@ -45,7 +45,7 @@ android:layout_marginEnd="4dp" android:layout_marginRight="4dp" android:layout_marginBottom="8dp" - android:drawableTop="@drawable/ic_file_select_file" + app:drawableTopCompat="@drawable/ic_select_file" android:text="@string/select_file_btn" android:theme="@style/ControlButton" app:layout_constraintBottom_toBottomOf="parent" @@ -61,7 +61,7 @@ android:layout_marginEnd="8dp" android:layout_marginRight="8dp" android:layout_marginBottom="8dp" - android:drawableTop="@drawable/ic_upload_btn" + app:drawableTopCompat="@drawable/ic_upload_btn" android:text="@string/upload_btn" android:theme="@style/ControlButton" app:layout_constraintBottom_toBottomOf="parent" diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index c606cb7..831d56a 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -4,7 +4,7 @@ Тип файла не поддерживается Ошибка Отправить в NS - Не установлено ни одного файлового менеджера.\n Пожалуйста установите один. Например Total Commander. + Не установлено ни одного файлового менеджера.\nПожалуйста установите один. Например Total Commander. NS подключён Устройство подключено Уведомление повяляется когда пользователь подключает NS к устройству diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml new file mode 100644 index 0000000..5789e46 --- /dev/null +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -0,0 +1,49 @@ + + + NS-USBloader + 選擇檔案 + 所選的檔案格式尚未支援 + 錯誤 + 上傳至NS + 裝置沒有安裝檔案管理器.\\n 請至PLAY商店內安裝檔案管理器. 例如:Total Commander + NS已連接 + 已連線的裝置 + 當使用者將行動裝置與NS連線時進行系統通知 + 在已連線的裝置內沒有找到NS. + 通訊協定 + 傳輸層 + 尚未選取任何項目 + 資料傳輸程序已被中斷. + 中斷 + 開啟側邊選單 + 關閉側邊選單 + TinFoil USB + GoldLeaf v0.5 + TinFoil NET + 關於此程式 + 其他 + 透過GoldLeaf v0.5連線時僅可單獨選取一個檔案來進行傳輸 + 尚未選擇通訊協定 + 程式相關說明 + NS-USBloader mobile + 本程式依據GNU公共授權條款GPLv3(或更新版本)開發. + 程式開發: Dmitry Isaenko. + 程式首頁: https://github.com/developersu/ns-usbloader-mobile + 翻譯人員: 會在程式首頁內提供本程式介面在地化翻譯的人員名單. + 如果本程式對你有助益,請在程式的GitHub頁面上按星號加分,也歡迎贊助我們(金額隨意) paypal.me/developersu, Yandex.Money. More information on home page. + 檔案錯誤 + (上傳失敗) + (NSP壞檔) + (已上傳) + (?) + 設定 + 設定 + NS IP + 手機 IP + 手機連接埠 + 自動偵測手機 IP + 已選取未知的通訊協定 (?) + 正在進行資料傳輸 + 正在進行傳輸 + 在通知欄顯示傳輸檔案進度 + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b0195ca..4804573 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -4,7 +4,7 @@ File type not supported Error Upload to NS - No file explorer installed.\\n Please install one. For example Total Commander. + No file explorer installed.\nPlease install one. For example Total Commander. NS Connected Device connected Notification appears when user connects NS to device diff --git a/build.gradle b/build.gradle index a5bb815..95a3996 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.5.3' + classpath 'com.android.tools.build:gradle:4.0.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index faf7e36..a3add93 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Mar 23 02:19:51 MSK 2020 +#Mon Aug 03 11:11:52 MSK 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip