1
0
Fork 0
mirror of https://github.com/syncthing/syncthing-android.git synced 2024-12-23 19:31:30 +00:00

Added seperate first start activity

This commit is contained in:
Felix Ableitner 2016-09-07 03:02:18 +02:00
parent 6129e00e9e
commit d464010ee5
4 changed files with 32 additions and 88 deletions

@ -1 +1 @@
Subproject commit 1188ebbb7b0f4545da4bcfceeb63d3c3ce6bb4ee Subproject commit 3ae51648da5fbed3962c08807f100d7bc79c4ae3

View file

@ -25,9 +25,8 @@
android:supportsRtl="true" android:supportsRtl="true"
android:installLocation="internalOnly"> android:installLocation="internalOnly">
<activity <activity
android:name=".activities.MainActivity" android:name=".activities.FirstStartActivity"
android:label="@string/app_name" android:label="@string/app_name">
android:launchMode="singleTop">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />
@ -37,6 +36,11 @@
<category android:name="android.intent.category.LEANBACK_LAUNCHER" /> <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter> </intent-filter>
</activity> </activity>
<activity
android:name=".activities.MainActivity"
android:label="@string/app_name"
android:launchMode="singleTop">
</activity>
<activity <activity
android:name=".activities.WebGuiActivity" android:name=".activities.WebGuiActivity"
android:label="@string/web_gui_title" android:label="@string/web_gui_title"

View file

@ -1,26 +1,20 @@
package com.nutomic.syncthingandroid.activities; package com.nutomic.syncthingandroid.activities;
import android.Manifest;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.Activity; import android.app.Activity;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.os.IBinder; import android.os.IBinder;
import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import android.support.design.widget.TabLayout; import android.support.design.widget.TabLayout;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.content.ContextCompat;
import android.support.v4.view.GravityCompat; import android.support.v4.view.GravityCompat;
import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout; import android.support.v4.widget.DrawerLayout;
@ -29,14 +23,8 @@ import android.support.v7.app.ActionBarDrawerToggle;
import android.util.DisplayMetrics; import android.util.DisplayMetrics;
import android.util.Log; import android.util.Log;
import android.util.TypedValue; import android.util.TypedValue;
import android.view.KeyEvent; import android.view.*;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast;
import com.nutomic.syncthingandroid.R; import com.nutomic.syncthingandroid.R;
import com.nutomic.syncthingandroid.fragments.DeviceListFragment; import com.nutomic.syncthingandroid.fragments.DeviceListFragment;
import com.nutomic.syncthingandroid.fragments.DrawerFragment; import com.nutomic.syncthingandroid.fragments.DrawerFragment;
@ -44,7 +32,6 @@ import com.nutomic.syncthingandroid.fragments.FolderListFragment;
import com.nutomic.syncthingandroid.syncthing.RestApi; import com.nutomic.syncthingandroid.syncthing.RestApi;
import com.nutomic.syncthingandroid.syncthing.SyncthingService; import com.nutomic.syncthingandroid.syncthing.SyncthingService;
import java.util.Arrays;
import java.util.Date; import java.util.Date;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -60,6 +47,8 @@ public class MainActivity extends SyncthingActivity
private static final String TAG = "MainActivity"; private static final String TAG = "MainActivity";
static final String EXTRA_FIRST_START = "com.nutomic.syncthing-android.MainActivity.FIRST_START";
/** /**
* Time after first start when usage reporting dialog should be shown. * Time after first start when usage reporting dialog should be shown.
* *
@ -67,8 +56,6 @@ public class MainActivity extends SyncthingActivity
*/ */
private static final long USAGE_REPORTING_DIALOG_DELAY = TimeUnit.DAYS.toMillis(3); private static final long USAGE_REPORTING_DIALOG_DELAY = TimeUnit.DAYS.toMillis(3);
private static final int REQUEST_WRITE_STORAGE = 142;
private AlertDialog mLoadingDialog; private AlertDialog mLoadingDialog;
private AlertDialog mDisabledDialog; private AlertDialog mDisabledDialog;
@ -81,8 +68,6 @@ public class MainActivity extends SyncthingActivity
private ActionBarDrawerToggle mDrawerToggle; private ActionBarDrawerToggle mDrawerToggle;
private DrawerLayout mDrawerLayout; private DrawerLayout mDrawerLayout;
private SharedPreferences mPreferences;
/** /**
* Handles various dialogs based on current state. * Handles various dialogs based on current state.
*/ */
@ -91,21 +76,10 @@ public class MainActivity extends SyncthingActivity
switch (currentState) { switch (currentState) {
case INIT: case INIT:
showLoadingDialog(); showLoadingDialog();
// Make sure the first start dialog is shown on top.
if (isFirstStart()) {
showFirstStartDialog();
}
break; break;
case STARTING: case STARTING:
showLoadingDialog(); showLoadingDialog();
dismissDisabledDialog(); dismissDisabledDialog();
int permissionState = ContextCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permissionState != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
REQUEST_WRITE_STORAGE);
}
break; break;
case ACTIVE: case ACTIVE:
dismissDisabledDialog(); dismissDisabledDialog();
@ -136,10 +110,6 @@ public class MainActivity extends SyncthingActivity
} }
} }
private boolean isFirstStart() {
return mPreferences.getBoolean("first_start", true);
}
/** /**
* Returns the unix timestamp at which the app was first installed. * Returns the unix timestamp at which the app was first installed.
*/ */
@ -154,22 +124,6 @@ public class MainActivity extends SyncthingActivity
return firstInstallTime; return firstInstallTime;
} }
/**
* Displays information for first app start.
*/
private void showFirstStartDialog() {
new AlertDialog.Builder(MainActivity.this)
.setTitle(R.string.welcome_title)
.setMessage(R.string.welcome_text)
.setNeutralButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
mPreferences.edit().putBoolean("first_start", false).apply();
}
})
.show();
}
/** /**
* Shows the loading dialog with the correct text ("creating keys" or "loading"). * Shows the loading dialog with the correct text ("creating keys" or "loading").
*/ */
@ -181,7 +135,7 @@ public class MainActivity extends SyncthingActivity
@SuppressLint("InflateParams") @SuppressLint("InflateParams")
View dialogLayout = inflater.inflate(R.layout.dialog_loading, null); View dialogLayout = inflater.inflate(R.layout.dialog_loading, null);
TextView loadingText = (TextView) dialogLayout.findViewById(R.id.loading_text); TextView loadingText = (TextView) dialogLayout.findViewById(R.id.loading_text);
loadingText.setText((isFirstStart()) loadingText.setText((getIntent().getBooleanExtra(EXTRA_FIRST_START, false))
? R.string.web_gui_creating_key ? R.string.web_gui_creating_key
: R.string.api_loading); : R.string.api_loading);
@ -238,7 +192,6 @@ public class MainActivity extends SyncthingActivity
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); setContentView(R.layout.activity_main);
mPreferences = PreferenceManager.getDefaultSharedPreferences(this);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mViewPager = (ViewPager) findViewById(R.id.pager); mViewPager = (ViewPager) findViewById(R.id.pager);
@ -369,7 +322,7 @@ public class MainActivity extends SyncthingActivity
/** /**
* Handles drawer opened and closed events, toggling option menu state. * Handles drawer opened and closed events, toggling option menu state.
*/ */
public class Toggle extends ActionBarDrawerToggle { private class Toggle extends ActionBarDrawerToggle {
public Toggle(Activity activity, DrawerLayout drawerLayout) { public Toggle(Activity activity, DrawerLayout drawerLayout) {
super(activity, drawerLayout, R.string.app_name, R.string.app_name); super(activity, drawerLayout, R.string.app_name, R.string.app_name);
} }
@ -489,22 +442,4 @@ public class MainActivity extends SyncthingActivity
}); });
} }
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
switch (requestCode) {
case REQUEST_WRITE_STORAGE:
Log.d(TAG, Arrays.toString(grantResults));
if (grantResults.length == 0 ||
grantResults[0] != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, R.string.toast_write_storage_permission_required,
Toast.LENGTH_LONG).show();
finish();
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
} }

View file

@ -5,9 +5,28 @@
<string name="app_description">An open, trustworthy and decentralized file synchronization application.</string> <string name="app_description">An open, trustworthy and decentralized file synchronization application.</string>
<!-- FirstStartActivity -->
<!-- Title for dialog displayed on first start -->
<string name="welcome_title">Welcome to Syncthing for Android</string>
<!-- Text for dialog displayed on first start -->
<string name="welcome_text">Syncthing is an open-source file synchronization application.\n\
To share data with other devices, you need add their unique device ID to the device list. Afterwards you can select which folders to share with which devices.\n\
Please report any problems you encounter via Github.</string>
<string name="cont">Continue</string>
<!-- MainActivity --> <!-- MainActivity -->
<!-- Text for WebGuiActivity loading view -->
<string name="web_gui_loading">Waiting for GUI</string>
<!-- Shown instead of web_gui_loading if the key does not exist and has to be created -->
<string name="web_gui_creating_key">Generating secure keys. This may take a few minutes.</string>
<!-- Title of the "add folder" menu action --> <!-- Title of the "add folder" menu action -->
<string name="add_folder">Add Folder</string> <string name="add_folder">Add Folder</string>
@ -199,20 +218,6 @@
<!-- Title of the web gui activity --> <!-- Title of the web gui activity -->
<string name="web_gui_title">Web GUI</string> <string name="web_gui_title">Web GUI</string>
<!-- Text for WebGuiActivity loading view -->
<string name="web_gui_loading">Waiting for GUI</string>
<!-- Shown instead of web_gui_loading if the key does not exist and has to be created -->
<string name="web_gui_creating_key">Generating secure keys. This may take a few minutes.</string>
<!-- Title for dialog displayed on first start -->
<string name="welcome_title">Welcome to Syncthing for Android</string>
<!-- Text for dialog displayed on first start -->
<string name="welcome_text">Syncthing is an open-source file synchronization application.\n\n\
To share data with other devices, you need add their unique device ID to the device list. Afterwards you can select which folders to share with which devices.\n\n
Please report any problems you encounter via Github.</string>
<!-- SettingsFragment --> <!-- SettingsFragment -->