mirror of
https://github.com/syncthing/syncthing-android.git
synced 2025-01-09 19:53:33 +00:00
Added notification permission. --------- Co-authored-by: Ashutosh Soni <ashutoshsoni@bitcot.com>
This commit is contained in:
parent
c333d858ab
commit
2ff421a166
5 changed files with 115 additions and 5 deletions
|
@ -7,6 +7,7 @@
|
||||||
<uses-feature android:name="android.hardware.touchscreen" android:required="false" />
|
<uses-feature android:name="android.hardware.touchscreen" android:required="false" />
|
||||||
<uses-feature android:name="android.hardware.location.gps" android:required="false" />
|
<uses-feature android:name="android.hardware.location.gps" android:required="false" />
|
||||||
|
|
||||||
|
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
|
||||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||||
|
|
|
@ -14,6 +14,7 @@ import android.Manifest;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.core.app.ActivityCompat;
|
import androidx.core.app.ActivityCompat;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
|
@ -29,8 +30,6 @@ import android.view.MotionEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.View.OnTouchListener;
|
import android.view.View.OnTouchListener;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.Window;
|
|
||||||
import android.view.WindowManager;
|
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
@ -44,7 +43,6 @@ import com.nutomic.syncthingandroid.util.PermissionUtil;
|
||||||
import com.nutomic.syncthingandroid.util.Util;
|
import com.nutomic.syncthingandroid.util.Util;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
import org.apache.commons.io.FileUtils;
|
import org.apache.commons.io.FileUtils;
|
||||||
|
|
||||||
|
@ -53,10 +51,13 @@ import javax.inject.Inject;
|
||||||
public class FirstStartActivity extends Activity {
|
public class FirstStartActivity extends Activity {
|
||||||
|
|
||||||
private enum Slide {
|
private enum Slide {
|
||||||
|
|
||||||
INTRO(R.layout.activity_firststart_slide_intro),
|
INTRO(R.layout.activity_firststart_slide_intro),
|
||||||
|
|
||||||
STORAGE(R.layout.activity_firststart_slide_storage),
|
STORAGE(R.layout.activity_firststart_slide_storage),
|
||||||
LOCATION(R.layout.activity_firststart_slide_location),
|
LOCATION(R.layout.activity_firststart_slide_location),
|
||||||
API_LEVEL_30(R.layout.activity_firststart_slide_api_level_30);
|
API_LEVEL_30(R.layout.activity_firststart_slide_api_level_30),
|
||||||
|
NOTIFICATION(R.layout.activity_firststart_slide_notification);
|
||||||
|
|
||||||
public final int layout;
|
public final int layout;
|
||||||
|
|
||||||
|
@ -191,6 +192,17 @@ public class FirstStartActivity extends Activity {
|
||||||
return mPreferences.getBoolean(Constants.PREF_FIRST_START, true);
|
return mPreferences.getBoolean(Constants.PREF_FIRST_START, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TargetApi(33)
|
||||||
|
private boolean isNotificationPermissionGranted() {
|
||||||
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ActivityCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private boolean upgradedToApiLevel30() {
|
private boolean upgradedToApiLevel30() {
|
||||||
if (mPreferences.getBoolean(Constants.PREF_UPGRADED_TO_API_LEVEL_30, false)) {
|
if (mPreferences.getBoolean(Constants.PREF_UPGRADED_TO_API_LEVEL_30, false)) {
|
||||||
return true;
|
return true;
|
||||||
|
@ -234,6 +246,9 @@ public class FirstStartActivity extends Activity {
|
||||||
// Skip if running as root, as that circumvents any Android FS restrictions.
|
// Skip if running as root, as that circumvents any Android FS restrictions.
|
||||||
return upgradedToApiLevel30()
|
return upgradedToApiLevel30()
|
||||||
|| PreferenceManager.getDefaultSharedPreferences(this).getBoolean(Constants.PREF_USE_ROOT, false);
|
|| PreferenceManager.getDefaultSharedPreferences(this).getBoolean(Constants.PREF_USE_ROOT, false);
|
||||||
|
case NOTIFICATION:
|
||||||
|
return isNotificationPermissionGranted();
|
||||||
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -328,6 +343,15 @@ public class FirstStartActivity extends Activity {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
case NOTIFICATION:
|
||||||
|
Button notificationBtn = (Button) view.findViewById(R.id.btn_notification);
|
||||||
|
notificationBtn.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
requestNotificationPermission();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
container.addView(view);
|
container.addView(view);
|
||||||
|
@ -364,7 +388,7 @@ public class FirstStartActivity extends Activity {
|
||||||
* so that back navigation works as expected.
|
* so that back navigation works as expected.
|
||||||
*/
|
*/
|
||||||
if (mPreferences.getBoolean(Constants.PREF_START_INTO_WEB_GUI, false)) {
|
if (mPreferences.getBoolean(Constants.PREF_START_INTO_WEB_GUI, false)) {
|
||||||
startActivities(new Intent[] {mainIntent, new Intent(this, WebGuiActivity.class)});
|
startActivities(new Intent[]{mainIntent, new Intent(this, WebGuiActivity.class)});
|
||||||
} else {
|
} else {
|
||||||
startActivity(mainIntent);
|
startActivity(mainIntent);
|
||||||
}
|
}
|
||||||
|
@ -389,6 +413,13 @@ public class FirstStartActivity extends Activity {
|
||||||
Constants.PermissionRequestType.LOCATION.ordinal());
|
Constants.PermissionRequestType.LOCATION.ordinal());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TargetApi(33)
|
||||||
|
private void requestNotificationPermission() {
|
||||||
|
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) {
|
||||||
|
requestPermissions(new String[]{Manifest.permission.POST_NOTIFICATIONS}, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void requestStoragePermission() {
|
private void requestStoragePermission() {
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
||||||
requestAllFilesAccessPermission();
|
requestAllFilesAccessPermission();
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
<vector android:height="24dp" android:tint="#000000"
|
||||||
|
android:viewportHeight="24" android:viewportWidth="24"
|
||||||
|
|
||||||
|
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<path
|
||||||
|
android:fillColor="?attr/colorControlNormal" android:pathData="M7.58,4.08L6.15,2.65C3.75,4.48 2.17,7.3 2.03,10.5h2c0.15,-2.65 1.51,-4.97 3.55,-6.42zM19.97,10.5h2c-0.15,-3.2 -1.73,-6.02 -4.12,-7.85l-1.42,1.43c2.02,1.45 3.39,3.77 3.54,6.42zM18,11c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2v-5zM12,22c0.14,0 0.27,-0.01 0.4,-0.04 0.65,-0.14 1.18,-0.58 1.44,-1.18 0.1,-0.24 0.15,-0.5 0.15,-0.78h-4c0.01,1.1 0.9,2 2.01,2z"/>
|
||||||
|
</vector>
|
|
@ -0,0 +1,68 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:fillViewport="true"
|
||||||
|
android:paddingBottom="@dimen/dots_full_height">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/title"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_margin="30dp"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="@string/enable_notification_permission"
|
||||||
|
android:textSize="30sp" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:layout_width="@dimen/img_width_height"
|
||||||
|
android:layout_height="@dimen/img_width_height"
|
||||||
|
android:contentDescription="@null"
|
||||||
|
android:src="@drawable/baseline_notifications_active_24"
|
||||||
|
android:tint="?attr/colorSecondary"
|
||||||
|
tools:ignore="UseAppTint" />
|
||||||
|
|
||||||
|
<com.google.android.material.button.MaterialButton
|
||||||
|
android:id="@+id/btn_notification"
|
||||||
|
style="@style/Widget.Material3.Button.ElevatedButton"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_horizontal"
|
||||||
|
android:contentDescription="@string/grant_permission"
|
||||||
|
android:drawableStart="@android:drawable/ic_menu_save"
|
||||||
|
android:paddingStart="40dp"
|
||||||
|
android:paddingLeft="40dp"
|
||||||
|
android:paddingEnd="40dp"
|
||||||
|
android:paddingRight="40dp"
|
||||||
|
android:text="@string/grant_permission"
|
||||||
|
android:textSize="12sp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/notification_permission_title"
|
||||||
|
android:textSize="@dimen/slide_title"
|
||||||
|
android:textStyle="bold" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_horizontal"
|
||||||
|
android:layout_marginTop="@dimen/desc_marginTop"
|
||||||
|
android:paddingLeft="@dimen/desc_padding"
|
||||||
|
android:paddingRight="@dimen/desc_padding"
|
||||||
|
android:paddingBottom="@dimen/desc_paddingBottom"
|
||||||
|
android:text="@string/require_notification_permission_desc"
|
||||||
|
android:textAlignment="center"
|
||||||
|
android:textSize="@dimen/slide_desc" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</ScrollView>
|
|
@ -823,5 +823,8 @@ Please report any problems you encounter via Github.</string>
|
||||||
<string name="browse">Browse</string>
|
<string name="browse">Browse</string>
|
||||||
<string name="no_sub_folder_is_selected">No sub folder is selected</string>
|
<string name="no_sub_folder_is_selected">No sub folder is selected</string>
|
||||||
<string name="share_device_id_chooser">Share device ID with</string>
|
<string name="share_device_id_chooser">Share device ID with</string>
|
||||||
|
<string name="require_notification_permission_desc">Syncthing requires your permission to show you notifications.Those are used to let you know about a new device connecting, or a new folder sharing request.</string>
|
||||||
|
<string name="notification_permission_title">Notification permission</string>
|
||||||
|
<string name="enable_notification_permission">Enable Notification Permission</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
Loading…
Reference in a new issue