diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c72495ef..ae855c6f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -55,7 +55,7 @@ android:parentActivityName=".activities.SettingsActivity" /> + android:parentActivityName=".activities.appmanager.AppManagerActivity"> diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/AppManagerActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/appmanager/AbstractAppManagerFragment.java similarity index 88% rename from app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/AppManagerActivity.java rename to app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/appmanager/AbstractAppManagerFragment.java index db758d3b..3442e5f0 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/AppManagerActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/appmanager/AbstractAppManagerFragment.java @@ -1,4 +1,4 @@ -package nodomain.freeyourgadget.gadgetbridge.activities; +package nodomain.freeyourgadget.gadgetbridge.activities.appmanager; import android.content.BroadcastReceiver; import android.content.Context; @@ -6,11 +6,14 @@ import android.content.Intent; import android.content.IntentFilter; import android.net.Uri; import android.os.Bundle; -import android.support.v4.app.NavUtils; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; import android.support.v4.content.LocalBroadcastManager; import android.view.ContextMenu; +import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; +import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ListView; @@ -27,6 +30,7 @@ import java.util.UUID; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.R; +import nodomain.freeyourgadget.gadgetbridge.activities.ExternalPebbleJSActivity; import nodomain.freeyourgadget.gadgetbridge.adapter.GBDeviceAppAdapter; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.impl.GBDeviceApp; @@ -36,17 +40,17 @@ import nodomain.freeyourgadget.gadgetbridge.util.PebbleUtils; import nodomain.freeyourgadget.gadgetbridge.util.Prefs; -public class AppManagerActivity extends GBActivity { +public class AbstractAppManagerFragment extends Fragment { public static final String ACTION_REFRESH_APPLIST = "nodomain.freeyourgadget.gadgetbridge.appmanager.action.refresh_applist"; - private static final Logger LOG = LoggerFactory.getLogger(AppManagerActivity.class); + private static final Logger LOG = LoggerFactory.getLogger(AbstractAppManagerFragment.class); private final BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals(GBApplication.ACTION_QUIT)) { - finish(); + // finish(); } else if (action.equals(ACTION_REFRESH_APPLIST)) { int appCount = intent.getIntExtra("app_count", 0); for (Integer i = 0; i < appCount; i++) { @@ -131,22 +135,30 @@ public class AppManagerActivity extends GBActivity { } @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - Bundle extras = getIntent().getExtras(); - if (extras != null) { - mGBDevice = extras.getParcelable(GBDevice.EXTRA_DEVICE); - } else { - throw new IllegalArgumentException("Must provide a device when invoking this activity"); - } - + public void onCreate(@Nullable Bundle savedInstanceState) { prefs = GBApplication.getPrefs(); + appList.addAll(getCachedApps()); - setContentView(R.layout.activity_appmanager); + appList.addAll(getSystemApps()); - ListView appListView = (ListView) findViewById(R.id.appListView); - mGBDeviceAppAdapter = new GBDeviceAppAdapter(this, appList); + IntentFilter filter = new IntentFilter(); + filter.addAction(GBApplication.ACTION_QUIT); + filter.addAction(ACTION_REFRESH_APPLIST); + + LocalBroadcastManager.getInstance(getContext()).registerReceiver(mReceiver, filter); + + GBApplication.deviceService().onAppInfoReq(); + + super.onCreate(savedInstanceState); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + + View rootView = inflater.inflate(R.layout.activity_appmanager, container, false); + + ListView appListView = (ListView) (rootView.findViewById(R.id.appListView)); + mGBDeviceAppAdapter = new GBDeviceAppAdapter(getContext(), appList); appListView.setAdapter(this.mGBDeviceAppAdapter); appListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @@ -159,23 +171,13 @@ public class AppManagerActivity extends GBActivity { registerForContextMenu(appListView); - appList.addAll(getCachedApps()); - - appList.addAll(getSystemApps()); - - IntentFilter filter = new IntentFilter(); - filter.addAction(GBApplication.ACTION_QUIT); - filter.addAction(ACTION_REFRESH_APPLIST); - - LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, filter); - - GBApplication.deviceService().onAppInfoReq(); + return rootView; } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); - getMenuInflater().inflate(R.menu.appmanager_context, menu); + getActivity().getMenuInflater().inflate(R.menu.appmanager_context, menu); AdapterView.AdapterContextMenuInfo acmi = (AdapterView.AdapterContextMenuInfo) menuInfo; selectedApp = appList.get(acmi.position); @@ -254,7 +256,7 @@ public class AppManagerActivity extends GBActivity { case R.id.appmanager_app_configure: GBApplication.deviceService().onAppStart(selectedApp.getUUID(), true); - Intent startIntent = new Intent(getApplicationContext(), ExternalPebbleJSActivity.class); + Intent startIntent = new Intent(getContext().getApplicationContext(), ExternalPebbleJSActivity.class); startIntent.putExtra("app_uuid", selectedApp.getUUID()); startIntent.putExtra(GBDevice.EXTRA_DEVICE, mGBDevice); startActivity(startIntent); @@ -271,15 +273,15 @@ public class AppManagerActivity extends GBActivity { public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: - NavUtils.navigateUpFromSameTask(this); +// NavUtils.navigateUpFromSameTask(this); return true; } return super.onOptionsItemSelected(item); } @Override - protected void onDestroy() { - LocalBroadcastManager.getInstance(this).unregisterReceiver(mReceiver); + public void onDestroy() { + LocalBroadcastManager.getInstance(getContext()).unregisterReceiver(mReceiver); super.onDestroy(); } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/appmanager/AppManagerActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/appmanager/AppManagerActivity.java new file mode 100644 index 00000000..31310dc5 --- /dev/null +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/appmanager/AppManagerActivity.java @@ -0,0 +1,83 @@ +package nodomain.freeyourgadget.gadgetbridge.activities.appmanager; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.view.ViewPager; + +import nodomain.freeyourgadget.gadgetbridge.R; +import nodomain.freeyourgadget.gadgetbridge.activities.AbstractFragmentPagerAdapter; +import nodomain.freeyourgadget.gadgetbridge.activities.AbstractGBFragmentActivity; +import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; + + +public class AppManagerActivity extends AbstractGBFragmentActivity { + private GBDevice mGBDevice = null; + + @Override + protected void onCreate(Bundle savedInstanceState) { + + super.onCreate(savedInstanceState); + + setContentView(R.layout.activity_fragmentappmanager); + + Bundle extras = getIntent().getExtras(); + if (extras != null) { + mGBDevice = extras.getParcelable(GBDevice.EXTRA_DEVICE); + } else { + throw new IllegalArgumentException("Must provide a device when invoking this activity"); + } + + + // Set up the ViewPager with the sections adapter. + ViewPager viewPager = (ViewPager) findViewById(R.id.appmanager_pager); + viewPager.setAdapter(getPagerAdapter()); + } + + @Override + protected AbstractFragmentPagerAdapter createFragmentPagerAdapter(FragmentManager fragmentManager) { + return new SectionsPagerAdapter(fragmentManager); + } + + public class SectionsPagerAdapter extends AbstractFragmentPagerAdapter { + + public SectionsPagerAdapter(FragmentManager fm) { + super(fm); + } + + @Override + public Fragment getItem(int position) { + // getItem is called to instantiate the fragment for the given page. + switch (position) { + case 0: + case 1: + case 2: + AbstractAppManagerFragment fragment = new AbstractAppManagerFragment(); + Bundle bundle = new Bundle(); + bundle.putParcelable("GBDevice", mGBDevice); + return fragment; + } + return null; + } + + @Override + public int getCount() { + return 3; + } + + @Override + public CharSequence getPageTitle(int position) { + switch (position) { + case 0: + return "test"; + case 1: + return "for"; + case 2: + return "me"; + case 3: + } + return super.getPageTitle(position); + } + } + +} diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/PebbleCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/PebbleCoordinator.java index c74db054..79a5d877 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/PebbleCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/PebbleCoordinator.java @@ -6,7 +6,7 @@ import android.net.Uri; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.R; -import nodomain.freeyourgadget.gadgetbridge.activities.AppManagerActivity; +import nodomain.freeyourgadget.gadgetbridge.activities.appmanager.AppManagerActivity; import nodomain.freeyourgadget.gadgetbridge.devices.AbstractDeviceCoordinator; import nodomain.freeyourgadget.gadgetbridge.devices.InstallHandler; import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/AbstractDeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/AbstractDeviceSupport.java index 21d7965b..627a1cf5 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/AbstractDeviceSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/AbstractDeviceSupport.java @@ -24,7 +24,7 @@ import java.util.Objects; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.R; -import nodomain.freeyourgadget.gadgetbridge.activities.AppManagerActivity; +import nodomain.freeyourgadget.gadgetbridge.activities.appmanager.AbstractAppManagerFragment; import nodomain.freeyourgadget.gadgetbridge.activities.charts.ChartsHost; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEvent; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventAppInfo; @@ -160,7 +160,7 @@ public abstract class AbstractDeviceSupport implements DeviceSupport { Context context = getContext(); LOG.info("Got event for APP_INFO"); - Intent appInfoIntent = new Intent(AppManagerActivity.ACTION_REFRESH_APPLIST); + Intent appInfoIntent = new Intent(AbstractAppManagerFragment.ACTION_REFRESH_APPLIST); int appCount = appInfoEvent.apps.length; appInfoIntent.putExtra("app_count", appCount); for (Integer i = 0; i < appCount; i++) { diff --git a/app/src/main/res/layout/activity_fragmentappmanager.xml b/app/src/main/res/layout/activity_fragmentappmanager.xml new file mode 100644 index 00000000..639a58f7 --- /dev/null +++ b/app/src/main/res/layout/activity_fragmentappmanager.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + +