Added error activity if no external storage is available
This commit is contained in:
parent
f73c402005
commit
d1c73645c4
24
res/layout/storage_error.xml
Normal file
24
res/layout/storage_error.xml
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent" >
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/imageView1"
|
||||||
|
android:layout_width="30dp"
|
||||||
|
android:layout_height="30dp"
|
||||||
|
android:layout_centerHorizontal="true"
|
||||||
|
android:layout_centerVertical="true"
|
||||||
|
android:layout_margin="16dp"
|
||||||
|
android:src="@android:drawable/stat_notify_sdcard_usb" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textView1"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_below="@+id/imageView1"
|
||||||
|
android:layout_centerHorizontal="true"
|
||||||
|
android:layout_margin="8dp"
|
||||||
|
android:text="@string/external_storage_error_msg" />
|
||||||
|
|
||||||
|
</RelativeLayout>
|
@ -93,5 +93,6 @@
|
|||||||
<string name="pref_mobileUpdate_sum">Allow updates over the mobile data connection</string>
|
<string name="pref_mobileUpdate_sum">Allow updates over the mobile data connection</string>
|
||||||
<string name="download_report_title">All downloads completed</string>
|
<string name="download_report_title">All downloads completed</string>
|
||||||
<string name="refresh_label">Refresh</string>
|
<string name="refresh_label">Refresh</string>
|
||||||
|
<string name="external_storage_error_msg">No external storage is available. Please make sure that external storage is mounted so that the app can work properly.</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
@ -13,6 +13,7 @@ import android.util.Log;
|
|||||||
import de.podfetcher.asynctask.FeedImageLoader;
|
import de.podfetcher.asynctask.FeedImageLoader;
|
||||||
import de.podfetcher.feed.FeedManager;
|
import de.podfetcher.feed.FeedManager;
|
||||||
import de.podfetcher.receiver.FeedUpdateReceiver;
|
import de.podfetcher.receiver.FeedUpdateReceiver;
|
||||||
|
import de.podfetcher.util.StorageUtils;
|
||||||
|
|
||||||
public class PodcastApp extends Application implements
|
public class PodcastApp extends Application implements
|
||||||
SharedPreferences.OnSharedPreferenceChangeListener {
|
SharedPreferences.OnSharedPreferenceChangeListener {
|
||||||
@ -39,8 +40,10 @@ public class PodcastApp extends Application implements
|
|||||||
SharedPreferences prefs = PreferenceManager
|
SharedPreferences prefs = PreferenceManager
|
||||||
.getDefaultSharedPreferences(this);
|
.getDefaultSharedPreferences(this);
|
||||||
prefs.registerOnSharedPreferenceChangeListener(this);
|
prefs.registerOnSharedPreferenceChangeListener(this);
|
||||||
FeedManager manager = FeedManager.getInstance();
|
if (StorageUtils.storageAvailable()) {
|
||||||
manager.loadDBData(getApplicationContext());
|
FeedManager manager = FeedManager.getInstance();
|
||||||
|
manager.loadDBData(getApplicationContext());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -63,9 +66,8 @@ public class PodcastApp extends Application implements
|
|||||||
alarmManager.cancel(updateIntent);
|
alarmManager.cancel(updateIntent);
|
||||||
if (hours != 0) {
|
if (hours != 0) {
|
||||||
long newIntervall = TimeUnit.HOURS.toMillis(hours);
|
long newIntervall = TimeUnit.HOURS.toMillis(hours);
|
||||||
alarmManager.setRepeating(
|
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
|
||||||
AlarmManager.RTC_WAKEUP, newIntervall,
|
newIntervall, newIntervall, updateIntent);
|
||||||
newIntervall, updateIntent);
|
|
||||||
Log.d(TAG, "Changed alarm to new intervall");
|
Log.d(TAG, "Changed alarm to new intervall");
|
||||||
} else {
|
} else {
|
||||||
Log.d(TAG, "Automatic update was deactivated");
|
Log.d(TAG, "Automatic update was deactivated");
|
||||||
|
@ -20,6 +20,7 @@ import de.podfetcher.feed.FeedManager;
|
|||||||
import de.podfetcher.storage.DownloadRequester;
|
import de.podfetcher.storage.DownloadRequester;
|
||||||
import de.podfetcher.util.ConnectionTester;
|
import de.podfetcher.util.ConnectionTester;
|
||||||
import de.podfetcher.util.DownloadError;
|
import de.podfetcher.util.DownloadError;
|
||||||
|
import de.podfetcher.util.StorageUtils;
|
||||||
import de.podfetcher.util.URLChecker;
|
import de.podfetcher.util.URLChecker;
|
||||||
import de.podfetcher.service.DownloadService;
|
import de.podfetcher.service.DownloadService;
|
||||||
|
|
||||||
@ -52,6 +53,7 @@ public class AddFeedActivity extends SherlockActivity {
|
|||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
StorageUtils.checkStorageAvailability(this);
|
||||||
setContentView(R.layout.addfeed);
|
setContentView(R.layout.addfeed);
|
||||||
|
|
||||||
requester = DownloadRequester.getInstance();
|
requester = DownloadRequester.getInstance();
|
||||||
@ -96,6 +98,13 @@ public class AddFeedActivity extends SherlockActivity {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
StorageUtils.checkStorageAvailability(this);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onStop() {
|
protected void onStop() {
|
||||||
super.onStop();
|
super.onStop();
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package de.podfetcher.activity;
|
package de.podfetcher.activity;
|
||||||
|
|
||||||
|
|
||||||
import android.graphics.drawable.BitmapDrawable;
|
import android.graphics.drawable.BitmapDrawable;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v4.app.FragmentManager;
|
import android.support.v4.app.FragmentManager;
|
||||||
@ -21,6 +20,7 @@ import de.podfetcher.feed.FeedManager;
|
|||||||
import de.podfetcher.fragment.ItemlistFragment;
|
import de.podfetcher.fragment.ItemlistFragment;
|
||||||
import de.podfetcher.fragment.FeedlistFragment;
|
import de.podfetcher.fragment.FeedlistFragment;
|
||||||
import de.podfetcher.util.FeedMenuHandler;
|
import de.podfetcher.util.FeedMenuHandler;
|
||||||
|
import de.podfetcher.util.StorageUtils;
|
||||||
|
|
||||||
/** Displays a List of FeedItems */
|
/** Displays a List of FeedItems */
|
||||||
public class FeedItemlistActivity extends SherlockFragmentActivity {
|
public class FeedItemlistActivity extends SherlockFragmentActivity {
|
||||||
@ -35,30 +35,40 @@ public class FeedItemlistActivity extends SherlockFragmentActivity {
|
|||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
StorageUtils.checkStorageAvailability(this);
|
||||||
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
|
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
|
||||||
|
|
||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
setContentView(R.layout.feeditemlist_activity);
|
setContentView(R.layout.feeditemlist_activity);
|
||||||
|
|
||||||
manager = FeedManager.getInstance();
|
manager = FeedManager.getInstance();
|
||||||
long feedId = getIntent().getLongExtra(FeedlistFragment.EXTRA_SELECTED_FEED, -1);
|
long feedId = getIntent().getLongExtra(
|
||||||
if(feedId == -1) Log.e(TAG, "Received invalid feed selection.");
|
FeedlistFragment.EXTRA_SELECTED_FEED, -1);
|
||||||
|
if (feedId == -1)
|
||||||
|
Log.e(TAG, "Received invalid feed selection.");
|
||||||
|
|
||||||
feed = manager.getFeed(feedId);
|
feed = manager.getFeed(feedId);
|
||||||
setTitle(feed.getTitle());
|
setTitle(feed.getTitle());
|
||||||
|
|
||||||
FragmentManager fragmentManager = getSupportFragmentManager();
|
FragmentManager fragmentManager = getSupportFragmentManager();
|
||||||
FragmentTransaction fT = fragmentManager.beginTransaction();
|
FragmentTransaction fT = fragmentManager.beginTransaction();
|
||||||
|
|
||||||
filf = ItemlistFragment.newInstance(feed.getId());
|
filf = ItemlistFragment.newInstance(feed.getId());
|
||||||
fT.add(R.id.feeditemlistFragment, filf);
|
fT.add(R.id.feeditemlistFragment, filf);
|
||||||
fT.commit();
|
fT.commit();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
StorageUtils.checkStorageAvailability(this);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onCreateOptionsMenu(Menu menu) {
|
public boolean onCreateOptionsMenu(Menu menu) {
|
||||||
return FeedMenuHandler.onCreateOptionsMenu(new MenuInflater(this), menu);
|
return FeedMenuHandler
|
||||||
|
.onCreateOptionsMenu(new MenuInflater(this), menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -71,7 +81,7 @@ public class FeedItemlistActivity extends SherlockFragmentActivity {
|
|||||||
if (FeedMenuHandler.onOptionsItemClicked(this, item, feed)) {
|
if (FeedMenuHandler.onOptionsItemClicked(this, item, feed)) {
|
||||||
filf.getListAdapter().notifyDataSetChanged();
|
filf.getListAdapter().notifyDataSetChanged();
|
||||||
} else {
|
} else {
|
||||||
switch(item.getItemId()) {
|
switch (item.getItemId()) {
|
||||||
case R.id.remove_item:
|
case R.id.remove_item:
|
||||||
FeedRemover remover = new FeedRemover(this) {
|
FeedRemover remover = new FeedRemover(this) {
|
||||||
@Override
|
@Override
|
||||||
@ -88,5 +98,5 @@ public class FeedItemlistActivity extends SherlockFragmentActivity {
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,7 @@ import de.podfetcher.fragment.FeedlistFragment;
|
|||||||
import de.podfetcher.fragment.ItemDescriptionFragment;
|
import de.podfetcher.fragment.ItemDescriptionFragment;
|
||||||
import de.podfetcher.fragment.ItemlistFragment;
|
import de.podfetcher.fragment.ItemlistFragment;
|
||||||
import de.podfetcher.util.FeedItemMenuHandler;
|
import de.podfetcher.util.FeedItemMenuHandler;
|
||||||
|
import de.podfetcher.util.StorageUtils;
|
||||||
|
|
||||||
/** Displays a single FeedItem and provides various actions */
|
/** Displays a single FeedItem and provides various actions */
|
||||||
public class ItemviewActivity extends SherlockFragmentActivity {
|
public class ItemviewActivity extends SherlockFragmentActivity {
|
||||||
@ -39,12 +40,20 @@ public class ItemviewActivity extends SherlockFragmentActivity {
|
|||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
StorageUtils.checkStorageAvailability(this);
|
||||||
manager = FeedManager.getInstance();
|
manager = FeedManager.getInstance();
|
||||||
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
|
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
|
||||||
extractFeeditem();
|
extractFeeditem();
|
||||||
populateUI();
|
populateUI();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
StorageUtils.checkStorageAvailability(this);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStop() {
|
public void onStop() {
|
||||||
super.onStop();
|
super.onStop();
|
||||||
@ -81,7 +90,8 @@ public class ItemviewActivity extends SherlockFragmentActivity {
|
|||||||
FragmentManager fragmentManager = getSupportFragmentManager();
|
FragmentManager fragmentManager = getSupportFragmentManager();
|
||||||
FragmentTransaction fragmentTransaction = fragmentManager
|
FragmentTransaction fragmentTransaction = fragmentManager
|
||||||
.beginTransaction();
|
.beginTransaction();
|
||||||
ItemDescriptionFragment fragment = ItemDescriptionFragment.newInstance(item);
|
ItemDescriptionFragment fragment = ItemDescriptionFragment
|
||||||
|
.newInstance(item);
|
||||||
fragmentTransaction.add(R.id.description_fragment, fragment);
|
fragmentTransaction.add(R.id.description_fragment, fragment);
|
||||||
fragmentTransaction.commit();
|
fragmentTransaction.commit();
|
||||||
}
|
}
|
||||||
|
@ -54,6 +54,7 @@ import de.podfetcher.service.PlayerStatus;
|
|||||||
import de.podfetcher.util.Converter;
|
import de.podfetcher.util.Converter;
|
||||||
import de.podfetcher.util.DownloadError;
|
import de.podfetcher.util.DownloadError;
|
||||||
import de.podfetcher.util.MediaPlayerError;
|
import de.podfetcher.util.MediaPlayerError;
|
||||||
|
import de.podfetcher.util.StorageUtils;
|
||||||
|
|
||||||
public class MediaplayerActivity extends SherlockFragmentActivity implements
|
public class MediaplayerActivity extends SherlockFragmentActivity implements
|
||||||
SurfaceHolder.Callback {
|
SurfaceHolder.Callback {
|
||||||
@ -131,6 +132,7 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements
|
|||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
Log.d(TAG, "Resuming Activity");
|
Log.d(TAG, "Resuming Activity");
|
||||||
|
StorageUtils.checkStorageAvailability(this);
|
||||||
bindToService();
|
bindToService();
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -170,6 +172,7 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements
|
|||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
Log.d(TAG, "Creating Activity");
|
Log.d(TAG, "Creating Activity");
|
||||||
|
StorageUtils.checkStorageAvailability(this);
|
||||||
|
|
||||||
orientation = getResources().getConfiguration().orientation;
|
orientation = getResources().getConfiguration().orientation;
|
||||||
manager = FeedManager.getInstance();
|
manager = FeedManager.getInstance();
|
||||||
|
@ -34,6 +34,7 @@ import de.podfetcher.fragment.QueueFragment;
|
|||||||
import de.podfetcher.fragment.UnreadItemlistFragment;
|
import de.podfetcher.fragment.UnreadItemlistFragment;
|
||||||
import de.podfetcher.service.DownloadService;
|
import de.podfetcher.service.DownloadService;
|
||||||
import de.podfetcher.storage.DownloadRequester;
|
import de.podfetcher.storage.DownloadRequester;
|
||||||
|
import de.podfetcher.util.StorageUtils;
|
||||||
|
|
||||||
public class PodfetcherActivity extends SherlockFragmentActivity {
|
public class PodfetcherActivity extends SherlockFragmentActivity {
|
||||||
private static final String TAG = "PodfetcherActivity";
|
private static final String TAG = "PodfetcherActivity";
|
||||||
@ -46,6 +47,7 @@ public class PodfetcherActivity extends SherlockFragmentActivity {
|
|||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
StorageUtils.checkStorageAvailability(this);
|
||||||
manager = FeedManager.getInstance();
|
manager = FeedManager.getInstance();
|
||||||
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
|
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
|
||||||
setContentView(R.layout.main);
|
setContentView(R.layout.main);
|
||||||
@ -69,6 +71,7 @@ public class PodfetcherActivity extends SherlockFragmentActivity {
|
|||||||
@Override
|
@Override
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
|
StorageUtils.checkStorageAvailability(this);
|
||||||
updateProgressBarVisibility();
|
updateProgressBarVisibility();
|
||||||
IntentFilter filter = new IntentFilter();
|
IntentFilter filter = new IntentFilter();
|
||||||
filter.addAction(DownloadService.ACTION_DOWNLOAD_HANDLED);
|
filter.addAction(DownloadService.ACTION_DOWNLOAD_HANDLED);
|
||||||
|
51
src/de/podfetcher/activity/StorageErrorActivity.java
Normal file
51
src/de/podfetcher/activity/StorageErrorActivity.java
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
package de.podfetcher.activity;
|
||||||
|
|
||||||
|
import android.content.BroadcastReceiver;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.IntentFilter;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.actionbarsherlock.app.SherlockActivity;
|
||||||
|
|
||||||
|
import de.podfetcher.R;
|
||||||
|
|
||||||
|
public class StorageErrorActivity extends SherlockActivity {
|
||||||
|
private static final String TAG = "StorageErrorActivity";
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
setContentView(R.layout.storage_error);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPause() {
|
||||||
|
super.onPause();
|
||||||
|
unregisterReceiver(mediaUpdate);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
registerReceiver(mediaUpdate, new IntentFilter(Intent.ACTION_MEDIA_MOUNTED));
|
||||||
|
}
|
||||||
|
|
||||||
|
private BroadcastReceiver mediaUpdate = new BroadcastReceiver() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onReceive(Context context, Intent intent) {
|
||||||
|
if (intent.getAction().equals(Intent.ACTION_MEDIA_MOUNTED)) {
|
||||||
|
if (intent.getBooleanExtra("read-only", true)) {
|
||||||
|
Log.d(TAG, "Media was mounted; Finishing activity");
|
||||||
|
finish();
|
||||||
|
} else {
|
||||||
|
Log.d(TAG, "Media seemed to have been mounted read only");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
28
src/de/podfetcher/util/StorageUtils.java
Normal file
28
src/de/podfetcher/util/StorageUtils.java
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
package de.podfetcher.util;
|
||||||
|
|
||||||
|
import de.podfetcher.activity.StorageErrorActivity;
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.os.Environment;
|
||||||
|
|
||||||
|
/** Utility functions for handling storage errors */
|
||||||
|
public class StorageUtils {
|
||||||
|
public static boolean storageAvailable() {
|
||||||
|
String state = Environment.getExternalStorageState();
|
||||||
|
return state.equals(Environment.MEDIA_MOUNTED);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**Checks if external storage is available. If external storage isn't
|
||||||
|
* available, the current activity is finsished an an error activity is launched.
|
||||||
|
* @param activity the activity which would be finished if no storage is available
|
||||||
|
* @return true if external storage is available
|
||||||
|
*/
|
||||||
|
public static boolean checkStorageAvailability(Activity activity) {
|
||||||
|
boolean storageAvailable = storageAvailable();
|
||||||
|
if (!storageAvailable) {
|
||||||
|
activity.finish();
|
||||||
|
activity.startActivity(new Intent(activity, StorageErrorActivity.class));
|
||||||
|
}
|
||||||
|
return storageAvailable;
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user