Support "back" button navigation during swap process. Start service at end of swap.
The back button will take you back through each step of the swap process now, and remove the swap Activity completely if you press back from the first screen. Also, when the WiFi QR code is shown, the local repo manager actually starts the relevant service.
This commit is contained in:
parent
87b82a6751
commit
e84e9c15e2
@ -5,6 +5,7 @@
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@android:color/white"
|
||||
xmlns:tools="http://schemas.android.com/tools" tools:context=".views.swap.SwapActivity">
|
||||
|
||||
<ListView
|
||||
|
@ -153,7 +153,7 @@ public class SelectAppsFragment extends ListFragment
|
||||
} else {
|
||||
for (String selected : FDroidApp.selectedApps) {
|
||||
if (TextUtils.equals(packageName, selected)) {
|
||||
listView.setItemChecked(i, true);
|
||||
listView.setItemChecked(i + 1, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -8,7 +8,6 @@ import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import org.fdroid.fdroid.Preferences;
|
||||
import org.fdroid.fdroid.R;
|
||||
import org.fdroid.fdroid.views.fragments.SelectLocalAppsFragment;
|
||||
|
||||
public class SwapActivity extends ActionBarActivity implements SwapProcessManager {
|
||||
|
||||
@ -21,26 +20,31 @@ public class SwapActivity extends ActionBarActivity implements SwapProcessManage
|
||||
private MenuItem nextMenuItem;
|
||||
private String nextMenuItemLabel;
|
||||
|
||||
public void nextStep() {
|
||||
getSupportFragmentManager().popBackStack();
|
||||
FragmentManager.BackStackEntry lastFragment = getSupportFragmentManager().getBackStackEntryAt(getSupportFragmentManager().getBackStackEntryCount() - 1);
|
||||
String name = lastFragment.getName();
|
||||
switch (name) {
|
||||
case STATE_START_SWAP:
|
||||
onSelectApps();
|
||||
break;
|
||||
case STATE_SELECT_APPS:
|
||||
onJoinWifi();
|
||||
break;
|
||||
case STATE_JOIN_WIFI:
|
||||
onAttemptNfc();
|
||||
break;
|
||||
case STATE_NFC:
|
||||
onWifiQr();
|
||||
break;
|
||||
case STATE_WIFI_QR:
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
if (currentState().equals(STATE_START_SWAP)) {
|
||||
finish();
|
||||
} else {
|
||||
super.onBackPressed();
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
private String currentState() {
|
||||
FragmentManager.BackStackEntry lastFragment = getSupportFragmentManager().getBackStackEntryAt(getSupportFragmentManager().getBackStackEntryCount() - 1);
|
||||
return lastFragment.getName();
|
||||
}
|
||||
|
||||
public void nextStep() {
|
||||
String current = currentState();
|
||||
if (current.equals(STATE_START_SWAP)) {
|
||||
onSelectApps();
|
||||
} else if (current.equals(STATE_SELECT_APPS)) {
|
||||
onJoinWifi();
|
||||
} else if (current.equals(STATE_JOIN_WIFI)) {
|
||||
onAttemptNfc();
|
||||
} else if (current.equals(STATE_NFC)) {
|
||||
onWifiQr();
|
||||
} else if (current.equals(STATE_WIFI_QR)) {
|
||||
}
|
||||
supportInvalidateOptionsMenu();
|
||||
}
|
||||
@ -94,7 +98,7 @@ public class SwapActivity extends ActionBarActivity implements SwapProcessManage
|
||||
|
||||
getSupportFragmentManager()
|
||||
.beginTransaction()
|
||||
.add(android.R.id.content, new StartSwapFragment(), STATE_START_SWAP)
|
||||
.replace(android.R.id.content, new StartSwapFragment(), STATE_START_SWAP)
|
||||
.addToBackStack(STATE_START_SWAP)
|
||||
.commit();
|
||||
hideNextButton();
|
||||
@ -107,7 +111,7 @@ public class SwapActivity extends ActionBarActivity implements SwapProcessManage
|
||||
|
||||
getSupportFragmentManager()
|
||||
.beginTransaction()
|
||||
.add(android.R.id.content, new SelectAppsFragment(), STATE_SELECT_APPS)
|
||||
.replace(android.R.id.content, new SelectAppsFragment(), STATE_SELECT_APPS)
|
||||
.addToBackStack(STATE_SELECT_APPS)
|
||||
.commit();
|
||||
showNextButton();
|
||||
@ -118,7 +122,7 @@ public class SwapActivity extends ActionBarActivity implements SwapProcessManage
|
||||
|
||||
getSupportFragmentManager()
|
||||
.beginTransaction()
|
||||
.add(android.R.id.content, new JoinWifiFragment(), STATE_JOIN_WIFI)
|
||||
.replace(android.R.id.content, new JoinWifiFragment(), STATE_JOIN_WIFI)
|
||||
.addToBackStack(STATE_JOIN_WIFI)
|
||||
.commit();
|
||||
showNextButton();
|
||||
@ -129,8 +133,8 @@ public class SwapActivity extends ActionBarActivity implements SwapProcessManage
|
||||
if (Preferences.get().showNfcDuringSwap() && NfcSwapFragment.isNfcSupported(this)) {
|
||||
getSupportFragmentManager()
|
||||
.beginTransaction()
|
||||
.addToBackStack(STATE_NFC)
|
||||
.replace(android.R.id.content, new NfcSwapFragment(), STATE_NFC)
|
||||
.addToBackStack(STATE_NFC)
|
||||
.commit();
|
||||
showNextButton();
|
||||
} else {
|
||||
@ -145,8 +149,8 @@ public class SwapActivity extends ActionBarActivity implements SwapProcessManage
|
||||
public void onWifiQr() {
|
||||
getSupportFragmentManager()
|
||||
.beginTransaction()
|
||||
.addToBackStack(STATE_WIFI_QR)
|
||||
.replace(android.R.id.content, new WifiQrFragment(), STATE_WIFI_QR)
|
||||
.addToBackStack(STATE_WIFI_QR)
|
||||
.commit();
|
||||
showNextButton();
|
||||
}
|
||||
|
@ -1,10 +1,18 @@
|
||||
package org.fdroid.fdroid.views.swap;
|
||||
|
||||
import android.annotation.TargetApi;
|
||||
import android.app.ProgressDialog;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.graphics.LightingColorFilter;
|
||||
import android.net.Uri;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.content.LocalBroadcastManager;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
@ -12,15 +20,37 @@ import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
import org.fdroid.fdroid.FDroidApp;
|
||||
import org.fdroid.fdroid.QrGenAsyncTask;
|
||||
import org.fdroid.fdroid.R;
|
||||
import org.fdroid.fdroid.Utils;
|
||||
import org.fdroid.fdroid.localrepo.LocalRepoManager;
|
||||
import org.fdroid.fdroid.localrepo.LocalRepoService;
|
||||
import org.fdroid.fdroid.net.WifiStateChangeService;
|
||||
|
||||
import java.util.Locale;
|
||||
import java.util.Timer;
|
||||
import java.util.TimerTask;
|
||||
|
||||
public class WifiQrFragment extends Fragment {
|
||||
|
||||
private BroadcastReceiver onWifiChange = new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent i) {
|
||||
setUIFromWifi();
|
||||
}
|
||||
};
|
||||
|
||||
private BroadcastReceiver onLocalRepoChange = new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent i) {
|
||||
setUIFromWifi();
|
||||
}
|
||||
};
|
||||
|
||||
private Timer stopTimer;
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
View view = inflater.inflate(R.layout.swap_wifi_qr, container, false);
|
||||
@ -35,6 +65,32 @@ public class WifiQrFragment extends Fragment {
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
setUIFromWifi();
|
||||
|
||||
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(onWifiChange,
|
||||
new IntentFilter(WifiStateChangeService.BROADCAST));
|
||||
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(onLocalRepoChange,
|
||||
new IntentFilter(LocalRepoService.STATE));
|
||||
|
||||
// if no local repo exists, create one with only FDroid in it
|
||||
if (!LocalRepoManager.get(getActivity()).xmlIndex.exists())
|
||||
new UpdateAsyncTask(getActivity(), new String[] {
|
||||
getActivity().getPackageName(),
|
||||
}).execute();
|
||||
|
||||
// start repo by default
|
||||
FDroidApp.startLocalRepoService(getActivity());
|
||||
// reset the timer if viewing this Activity again
|
||||
if (stopTimer != null)
|
||||
stopTimer.cancel();
|
||||
// automatically turn off after 15 minutes
|
||||
stopTimer = new Timer();
|
||||
stopTimer.schedule(new TimerTask() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
FDroidApp.stopLocalRepoService(getActivity());
|
||||
}
|
||||
}, 900000); // 15 minutes
|
||||
}
|
||||
|
||||
@TargetApi(14)
|
||||
@ -70,4 +126,67 @@ public class WifiQrFragment extends Fragment {
|
||||
|
||||
}
|
||||
|
||||
class UpdateAsyncTask extends AsyncTask<Void, String, Void> {
|
||||
private static final String TAG = "UpdateAsyncTask";
|
||||
private ProgressDialog progressDialog;
|
||||
private String[] selectedApps;
|
||||
private Uri sharingUri;
|
||||
|
||||
public UpdateAsyncTask(Context c, String[] apps) {
|
||||
selectedApps = apps;
|
||||
progressDialog = new ProgressDialog(c);
|
||||
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
|
||||
progressDialog.setTitle(R.string.updating);
|
||||
sharingUri = Utils.getSharingUri(c, FDroidApp.repo);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPreExecute() {
|
||||
progressDialog.show();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Void doInBackground(Void... params) {
|
||||
try {
|
||||
final LocalRepoManager lrm = LocalRepoManager.get(getActivity());
|
||||
publishProgress(getString(R.string.deleting_repo));
|
||||
lrm.deleteRepo();
|
||||
for (String app : selectedApps) {
|
||||
publishProgress(String.format(getString(R.string.adding_apks_format), app));
|
||||
lrm.addApp(getActivity(), app);
|
||||
}
|
||||
lrm.writeIndexPage(sharingUri.toString());
|
||||
publishProgress(getString(R.string.writing_index_jar));
|
||||
lrm.writeIndexJar();
|
||||
publishProgress(getString(R.string.linking_apks));
|
||||
lrm.copyApksToRepo();
|
||||
publishProgress(getString(R.string.copying_icons));
|
||||
// run the icon copy without progress, its not a blocker
|
||||
new AsyncTask<Void, Void, Void>() {
|
||||
|
||||
@Override
|
||||
protected Void doInBackground(Void... params) {
|
||||
lrm.copyIconsToRepo();
|
||||
return null;
|
||||
}
|
||||
}.execute();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onProgressUpdate(String... progress) {
|
||||
super.onProgressUpdate(progress);
|
||||
progressDialog.setMessage(progress[0]);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(Void result) {
|
||||
progressDialog.dismiss();
|
||||
Toast.makeText(getActivity(), R.string.updated_local_repo, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user