diff --git a/.gitignore b/.gitignore
index 4f33ee1d..a9d1f4e7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -43,7 +43,7 @@ local.properties
#.idea/workspace.xml - remove # and delete .idea if it better suit your needs.
.gradle
build/
-#*.iml
+*.iml
## Windows detritus
#############
diff --git a/Clover/app/build.gradle b/Clover/app/build.gradle
index 22095414..1b32f719 100644
--- a/Clover/app/build.gradle
+++ b/Clover/app/build.gradle
@@ -67,10 +67,13 @@ android {
}
dependencies {
+ compile 'com.android.support:support-v13:21.0.0'
+ compile 'com.android.support:appcompat-v7:21.0.3'
+ compile 'com.android.support:support-v13:18.0.0'
+
compile 'org.jsoup:jsoup:1.8.1'
compile 'com.j256.ormlite:ormlite-core:4.48'
compile 'com.j256.ormlite:ormlite-android:4.48'
- compile 'com.android.support:support-v13:18.0.0'
compile 'com.koushikdutta.ion:ion:2.0.1'
compile 'pl.droidsonroids.gif:android-gif-drawable:1.1.0'
diff --git a/Clover/app/src/main/AndroidManifest.xml b/Clover/app/src/main/AndroidManifest.xml
index 87c921e0..fd559b3d 100644
--- a/Clover/app/src/main/AndroidManifest.xml
+++ b/Clover/app/src/main/AndroidManifest.xml
@@ -80,60 +80,30 @@ along with this program. If not, see .
android:windowSoftInputMode="adjustResize" />
-
-
+ android:label="@string/action_settings" />
-
-
+ android:label="@string/preference_watch_settings" />
-
-
+ android:label="@string/preference_pass_settings" />
-
-
+ android:label="@string/preference_about" />
-
-
+ android:label="@string/board_edit" />
+ android:theme="@style/Chan.ImageView" />
-
-
+ android:label="@string/settings_advanced_label" />
engines = new ArrayList<>();
public abstract int getId();
+
public abstract String getName();
+
public abstract String getUrl(String imageUrl);
static {
diff --git a/Clover/app/src/main/java/org/floens/chan/core/ChanPreferences.java b/Clover/app/src/main/java/org/floens/chan/core/ChanPreferences.java
index 4de9c150..f4e4bdb2 100644
--- a/Clover/app/src/main/java/org/floens/chan/core/ChanPreferences.java
+++ b/Clover/app/src/main/java/org/floens/chan/core/ChanPreferences.java
@@ -69,6 +69,10 @@ public class ChanPreferences {
return p().getBoolean("preference_image_save_original", false);
}
+ public static boolean getImageShareUrl() {
+ return p().getBoolean("preference_image_share_url", false);
+ }
+
public static boolean getWatchEnabled() {
return p().getBoolean("preference_watch_enabled", false);
}
diff --git a/Clover/app/src/main/java/org/floens/chan/core/model/PostLinkable.java b/Clover/app/src/main/java/org/floens/chan/core/model/PostLinkable.java
index a59803b8..c2de1ca3 100644
--- a/Clover/app/src/main/java/org/floens/chan/core/model/PostLinkable.java
+++ b/Clover/app/src/main/java/org/floens/chan/core/model/PostLinkable.java
@@ -57,7 +57,7 @@ public class PostLinkable extends ClickableSpan {
public void updateDrawState(TextPaint ds) {
if (type == Type.QUOTE || type == Type.LINK || type == Type.THREAD) {
if (type == Type.QUOTE) {
- if (value instanceof Integer && post.getLinkableListener() != null && (Integer)value == post.getLinkableListener().getHighlightQuotesWithNo()) {
+ if (value instanceof Integer && post.getLinkableListener() != null && (Integer) value == post.getLinkableListener().getHighlightQuotesWithNo()) {
ds.setColor(ThemeHelper.getInstance().getHighlightQuoteColor());
} else {
ds.setColor(ThemeHelper.getInstance().getQuoteColor());
diff --git a/Clover/app/src/main/java/org/floens/chan/ui/ThemeActivity.java b/Clover/app/src/main/java/org/floens/chan/ui/ThemeActivity.java
new file mode 100644
index 00000000..8f484b5e
--- /dev/null
+++ b/Clover/app/src/main/java/org/floens/chan/ui/ThemeActivity.java
@@ -0,0 +1,48 @@
+/*
+ * Clover - 4chan browser https://github.com/Floens/Clover/
+ * Copyright (C) 2014 Floens
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package org.floens.chan.ui;
+
+import android.support.v7.app.ActionBarActivity;
+import android.support.v7.widget.Toolbar;
+import android.view.MenuItem;
+
+import org.floens.chan.R;
+import org.floens.chan.utils.ThemeHelper;
+
+public class ThemeActivity extends ActionBarActivity {
+ private Toolbar toolbar;
+
+ public void setTheme() {
+ setTheme(ThemeHelper.getInstance().getTheme().resValue);
+ }
+
+ public void setToolbar() {
+ toolbar = (Toolbar) findViewById(R.id.toolbar);
+ setSupportActionBar(toolbar);
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(final MenuItem item) {
+ if (item.getItemId() == android.R.id.home) {
+ finish();
+ return true;
+ } else {
+ return super.onOptionsItemSelected(item);
+ }
+ }
+}
diff --git a/Clover/app/src/main/java/org/floens/chan/ui/activity/AboutActivity.java b/Clover/app/src/main/java/org/floens/chan/ui/activity/AboutActivity.java
index 454f7e89..10f4c897 100644
--- a/Clover/app/src/main/java/org/floens/chan/ui/activity/AboutActivity.java
+++ b/Clover/app/src/main/java/org/floens/chan/ui/activity/AboutActivity.java
@@ -17,18 +17,21 @@
*/
package org.floens.chan.ui.activity;
-import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;
-import org.floens.chan.utils.ThemeHelper;
+import org.floens.chan.R;
+import org.floens.chan.ui.ThemeActivity;
-public class AboutActivity extends Activity {
+public class AboutActivity extends ThemeActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- ThemeHelper.setTheme(this);
+ setTheme();
+ setContentView(R.layout.toolbar_activity);
+ setToolbar();
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
WebView webView = new WebView(this);
webView.loadUrl("file:///android_asset/html/licenses.html");
diff --git a/Clover/app/src/main/java/org/floens/chan/ui/activity/AdvancedSettingsActivity.java b/Clover/app/src/main/java/org/floens/chan/ui/activity/AdvancedSettingsActivity.java
index a49c3dfd..8425f0b2 100644
--- a/Clover/app/src/main/java/org/floens/chan/ui/activity/AdvancedSettingsActivity.java
+++ b/Clover/app/src/main/java/org/floens/chan/ui/activity/AdvancedSettingsActivity.java
@@ -17,7 +17,6 @@
*/
package org.floens.chan.ui.activity;
-import android.app.Activity;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.Preference;
@@ -26,19 +25,22 @@ import android.preference.PreferenceFragment;
import org.floens.chan.R;
import org.floens.chan.chan.ChanUrls;
import org.floens.chan.core.ChanPreferences;
+import org.floens.chan.ui.ThemeActivity;
import org.floens.chan.ui.fragment.FolderPickFragment;
-import org.floens.chan.utils.ThemeHelper;
import java.io.File;
-public class AdvancedSettingsActivity extends Activity {
+public class AdvancedSettingsActivity extends ThemeActivity {
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- ThemeHelper.setTheme(this);
+ setTheme();
+ setContentView(R.layout.toolbar_activity);
+ setToolbar();
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
- getFragmentManager().beginTransaction().replace(android.R.id.content, new AdvancedSettingsFragment()).commit();
+ getFragmentManager().beginTransaction().replace(R.id.content, new AdvancedSettingsFragment()).commit();
}
public static class AdvancedSettingsFragment extends PreferenceFragment {
@@ -112,7 +114,7 @@ public class AdvancedSettingsActivity extends Activity {
findPreference("preference_network_https").setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
- ChanUrls.loadScheme((Boolean)newValue);
+ ChanUrls.loadScheme((Boolean) newValue);
return true;
}
diff --git a/Clover/app/src/main/java/org/floens/chan/ui/activity/BaseActivity.java b/Clover/app/src/main/java/org/floens/chan/ui/activity/BaseActivity.java
index 60284996..4abe6451 100644
--- a/Clover/app/src/main/java/org/floens/chan/ui/activity/BaseActivity.java
+++ b/Clover/app/src/main/java/org/floens/chan/ui/activity/BaseActivity.java
@@ -17,22 +17,21 @@
*/
package org.floens.chan.ui.activity;
-import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.TypedArray;
-import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.NfcAdapter;
import android.os.Bundle;
-import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v4.widget.SlidingPaneLayout;
import android.support.v4.widget.SlidingPaneLayout.PanelSlideListener;
+import android.support.v7.app.ActionBarDrawerToggle;
+import android.support.v7.widget.ShareActionProvider;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuItem;
@@ -43,7 +42,6 @@ import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.EditText;
import android.widget.ListView;
-import android.widget.ShareActionProvider;
import org.floens.chan.ChanApplication;
import org.floens.chan.R;
@@ -52,16 +50,14 @@ import org.floens.chan.core.model.ChanThread;
import org.floens.chan.core.model.Loadable;
import org.floens.chan.core.model.Pin;
import org.floens.chan.core.model.Post;
-import org.floens.chan.ui.BadgeDrawable;
import org.floens.chan.ui.SwipeDismissListViewTouchListener;
import org.floens.chan.ui.SwipeDismissListViewTouchListener.DismissCallbacks;
+import org.floens.chan.ui.ThemeActivity;
import org.floens.chan.ui.adapter.PinnedAdapter;
import org.floens.chan.utils.ThemeHelper;
import org.floens.chan.utils.Utils;
-import java.util.List;
-
-public abstract class BaseActivity extends Activity implements PanelSlideListener, WatchManager.PinListener {
+public abstract class BaseActivity extends ThemeActivity implements PanelSlideListener, WatchManager.PinListener {
public static boolean doRestartOnResume = false;
private final static int ACTION_OPEN_URL = 1;
@@ -99,11 +95,13 @@ public abstract class BaseActivity extends Activity implements PanelSlideListene
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- ThemeHelper.setTheme(this);
ThemeHelper.getInstance().reloadPostViewColors(this);
setContentView(R.layout.activity_base);
+ setTheme();
+ setToolbar();
+
pinDrawer = (DrawerLayout) findViewById(R.id.drawer_layout);
initDrawer();
@@ -115,6 +113,15 @@ public abstract class BaseActivity extends Activity implements PanelSlideListene
updateIcon();
}
+ @Override
+ public void onBackPressed() {
+ if (pinDrawer.isDrawerOpen(pinDrawerView)) {
+ pinDrawer.closeDrawer(pinDrawerView);
+ } else {
+ super.onBackPressed();
+ }
+ }
+
@Override
protected void onDestroy() {
super.onDestroy();
@@ -155,7 +162,7 @@ public abstract class BaseActivity extends Activity implements PanelSlideListene
pinDrawerView = (ListView) findViewById(R.id.left_drawer);
- pinnedAdapter = new PinnedAdapter(getActionBar().getThemedContext(), pinDrawerView); // Get the dark theme, not the light one
+ pinnedAdapter = new PinnedAdapter(getSupportActionBar().getThemedContext(), pinDrawerView); // Get the dark theme, not the light one
pinnedAdapter.reload();
pinDrawerView.setAdapter(pinnedAdapter);
@@ -210,7 +217,7 @@ public abstract class BaseActivity extends Activity implements PanelSlideListene
}
private void updateIcon() {
- List list = ChanApplication.getWatchManager().getWatchingPins();
+ /*List list = ChanApplication.getWatchManager().getWatchingPins();
if (list.size() > 0) {
int count = 0;
boolean color = false;
@@ -223,13 +230,13 @@ public abstract class BaseActivity extends Activity implements PanelSlideListene
if (count > 0) {
Drawable icon = BadgeDrawable.get(getResources(), R.drawable.ic_launcher, count, color);
- getActionBar().setIcon(icon);
+ getSupportActionBar().setIcon(icon);
} else {
- getActionBar().setIcon(R.drawable.ic_launcher);
+ getSupportActionBar().setIcon(R.drawable.ic_launcher);
}
} else {
- getActionBar().setIcon(R.drawable.ic_launcher);
- }
+ getSupportActionBar().setIcon(R.drawable.ic_launcher);
+ }*/
}
public void removePin(Pin pin) {
@@ -295,11 +302,11 @@ public abstract class BaseActivity extends Activity implements PanelSlideListene
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.base, menu);
- shareActionProvider = (ShareActionProvider) menu.findItem(R.id.action_share).getActionProvider();
+ /*shareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(menu.findItem(R.id.action_share));
if (pendingShareActionProviderIntent != null) {
shareActionProvider.setShareIntent(pendingShareActionProviderIntent);
pendingShareActionProviderIntent = null;
- }
+ }*/
return true;
}
@@ -366,12 +373,9 @@ public abstract class BaseActivity extends Activity implements PanelSlideListene
* @param url
*/
public void showUrlOpenPicker(String url) {
- Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
-
- Intent pickIntent = new Intent(Intent.ACTION_PICK_ACTIVITY);
- pickIntent.putExtra(Intent.EXTRA_INTENT, intent);
-
- startActivityForResult(pickIntent, ACTION_OPEN_URL);
+ Intent intent = new Intent(Intent.ACTION_VIEW);
+ intent.setData(Uri.parse(url));
+ startActivity(intent);
}
/**
diff --git a/Clover/app/src/main/java/org/floens/chan/ui/activity/BoardEditor.java b/Clover/app/src/main/java/org/floens/chan/ui/activity/BoardEditor.java
index 48e476b9..74543edf 100644
--- a/Clover/app/src/main/java/org/floens/chan/ui/activity/BoardEditor.java
+++ b/Clover/app/src/main/java/org/floens/chan/ui/activity/BoardEditor.java
@@ -17,7 +17,6 @@
*/
package org.floens.chan.ui.activity;
-import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -52,14 +51,14 @@ import org.floens.chan.core.ChanPreferences;
import org.floens.chan.core.manager.BoardManager;
import org.floens.chan.core.model.Board;
import org.floens.chan.ui.SwipeDismissListViewTouchListener;
-import org.floens.chan.utils.ThemeHelper;
+import org.floens.chan.ui.ThemeActivity;
import org.floens.chan.utils.Utils;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
-public class BoardEditor extends Activity {
+public class BoardEditor extends ThemeActivity {
private final BoardManager boardManager = ChanApplication.getBoardManager();
private List list;
@@ -70,7 +69,10 @@ public class BoardEditor extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- ThemeHelper.setTheme(this);
+ setTheme();
+ setContentView(R.layout.toolbar_activity);
+ setToolbar();
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
list = boardManager.getSavedBoards();
@@ -150,7 +152,7 @@ public class BoardEditor extends Activity {
}
});
- setContentView(listView);
+ ((ViewGroup) findViewById(R.id.content)).addView(listView);
}
@Override
@@ -186,6 +188,9 @@ public class BoardEditor extends Activity {
ChanPreferences.setBoardEditorFillerEnabled(!ChanPreferences.getBoardEditorFillerEnabled());
item.setChecked(ChanPreferences.getBoardEditorFillerEnabled());
return true;
+ case android.R.id.home:
+ finish();
+ return true;
}
return super.onOptionsItemSelected(item);
diff --git a/Clover/app/src/main/java/org/floens/chan/ui/activity/ChanActivity.java b/Clover/app/src/main/java/org/floens/chan/ui/activity/ChanActivity.java
index 190810b9..c0607835 100644
--- a/Clover/app/src/main/java/org/floens/chan/ui/activity/ChanActivity.java
+++ b/Clover/app/src/main/java/org/floens/chan/ui/activity/ChanActivity.java
@@ -17,7 +17,6 @@
*/
package org.floens.chan.ui.activity;
-import android.app.ActionBar;
import android.app.AlertDialog;
import android.app.FragmentTransaction;
import android.content.Context;
@@ -26,7 +25,8 @@ import android.content.Intent;
import android.content.res.Configuration;
import android.net.Uri;
import android.os.Bundle;
-import android.support.v4.app.ActionBarDrawerToggle;
+import android.support.v7.app.ActionBar;
+import android.support.v7.app.ActionBarDrawerToggle;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.Menu;
@@ -89,9 +89,9 @@ public class ChanActivity extends BaseActivity implements AdapterView.OnItemSele
ft.replace(R.id.right_pane, threadFragment);
ft.commitAllowingStateLoss();
- final ActionBar actionBar = getActionBar();
+ final ActionBar actionBar = getSupportActionBar();
- boardSpinner = new Spinner(actionBar.getThemedContext());
+ boardSpinner = new Spinner(this);
spinnerAdapter = new BoardSpinnerAdapter(this, boardSpinner);
boardSpinner.setAdapter(spinnerAdapter);
boardSpinner.setOnItemSelectedListener(this);
@@ -180,9 +180,7 @@ public class ChanActivity extends BaseActivity implements AdapterView.OnItemSele
@Override
protected void initDrawer() {
- pinDrawerListener = new ActionBarDrawerToggle(this, pinDrawer, R.drawable.ic_drawer, R.string.drawer_open,
- R.string.drawer_close) {
- };
+ pinDrawerListener = new ActionBarDrawerToggle(this, pinDrawer, R.string.drawer_open, R.string.drawer_close);
super.initDrawer();
}
@@ -203,10 +201,14 @@ public class ChanActivity extends BaseActivity implements AdapterView.OnItemSele
@Override
public void onBackPressed() {
- if (threadPane.isOpen()) {
- super.onBackPressed();
+ if (pinDrawer.isDrawerOpen(pinDrawerView)) {
+ pinDrawer.closeDrawer(pinDrawerView);
} else {
- threadPane.openPane();
+ if (threadPane.isOpen()) {
+ super.onBackPressed();
+ } else {
+ threadPane.openPane();
+ }
}
}
@@ -241,6 +243,12 @@ public class ChanActivity extends BaseActivity implements AdapterView.OnItemSele
updateActionBarState();
}
+ @Override
+ public void removePin(Pin pin) {
+ super.removePin(pin);
+ updateActionBarState();
+ }
+
@Override
public void onNothingSelected(final AdapterView> parent) {
}
@@ -360,7 +368,7 @@ public class ChanActivity extends BaseActivity implements AdapterView.OnItemSele
}
private void updateActionBarStateCallback() {
- final ActionBar actionBar = getActionBar();
+ final ActionBar actionBar = getSupportActionBar();
if (threadPane.isSlideable()) {
if (threadPane.isOpen()) {
@@ -425,6 +433,16 @@ public class ChanActivity extends BaseActivity implements AdapterView.OnItemSele
setMenuItemEnabled(menu.findItem(R.id.action_search), slidable);
setMenuItemEnabled(menu.findItem(R.id.action_search_tablet), !slidable);
+ boolean bookmarkedFilled = false;
+ if (threadLoadable.mode == Loadable.Mode.THREAD) {
+ Pin pin = ChanApplication.getWatchManager().findPinByLoadable(threadLoadable);
+ if (pin != null) {
+ bookmarkedFilled = true;
+ }
+ }
+
+ menu.findItem(R.id.action_pin).setIcon(bookmarkedFilled ? R.drawable.ic_bookmark_filled : R.drawable.ic_bookmark);
+
return super.onPrepareOptionsMenu(menu);
}
@@ -469,8 +487,13 @@ public class ChanActivity extends BaseActivity implements AdapterView.OnItemSele
if (threadFragment.hasLoader()) {
Loader loader = threadFragment.getLoader();
if (loader != null && loader.getLoadable().isThreadMode() && loader.getThread() != null) {
- ChanApplication.getWatchManager().addPin(loader.getLoadable(), loader.getThread().op);
- pinDrawer.openDrawer(pinDrawerView);
+ Pin pin = ChanApplication.getWatchManager().findPinByLoadable(threadLoadable);
+ if (pin != null) {
+ ChanApplication.getWatchManager().removePin(pin);
+ } else {
+ ChanApplication.getWatchManager().addPin(loader.getLoadable(), loader.getThread().op);
+ }
+ updateActionBarState();
}
}
@@ -712,14 +735,24 @@ public class ChanActivity extends BaseActivity implements AdapterView.OnItemSele
}
}
+ @Override
+ public View getDropDownView(int position, View convertView, ViewGroup parent) {
+ return createView(position, convertView, parent, true);
+ }
+
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
+ return createView(position, convertView, parent, false);
+ }
+
+ private View createView(int position, View convertView, ViewGroup parent, boolean dropDown) {
if (position == getCount() - 1) {
- TextView textView = (TextView) LayoutInflater.from(context).inflate(R.layout.board_select_add, null);
+ TextView textView = (TextView) LayoutInflater.from(context).inflate(R.layout.board_select_add, parent, false);
textView.setText(getItem(position));
return textView;
} else {
- TextView textView = (TextView) LayoutInflater.from(context).inflate(R.layout.board_select_spinner, null);
+ TextView textView = (TextView) LayoutInflater.from(context).inflate(
+ dropDown ? R.layout.board_select_spinner_dropdown : R.layout.board_select_spinner, parent, false);
textView.setText(getItem(position));
return textView;
}
diff --git a/Clover/app/src/main/java/org/floens/chan/ui/activity/DeveloperActivity.java b/Clover/app/src/main/java/org/floens/chan/ui/activity/DeveloperActivity.java
index 22c802dd..39d6c15d 100644
--- a/Clover/app/src/main/java/org/floens/chan/ui/activity/DeveloperActivity.java
+++ b/Clover/app/src/main/java/org/floens/chan/ui/activity/DeveloperActivity.java
@@ -17,7 +17,6 @@
*/
package org.floens.chan.ui.activity;
-import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
@@ -25,17 +24,21 @@ import android.widget.LinearLayout;
import android.widget.TextView;
import org.floens.chan.ChanApplication;
+import org.floens.chan.R;
import org.floens.chan.core.model.SavedReply;
-import org.floens.chan.utils.ThemeHelper;
+import org.floens.chan.ui.ThemeActivity;
import java.util.Random;
-public class DeveloperActivity extends Activity {
+public class DeveloperActivity extends ThemeActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- ThemeHelper.setTheme(this);
+ setTheme();
+ setContentView(R.layout.toolbar_activity);
+ setToolbar();
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
LinearLayout wrapper = new LinearLayout(this);
wrapper.setOrientation(LinearLayout.VERTICAL);
diff --git a/Clover/app/src/main/java/org/floens/chan/ui/activity/ImageViewActivity.java b/Clover/app/src/main/java/org/floens/chan/ui/activity/ImageViewActivity.java
index bc425855..79f233b4 100644
--- a/Clover/app/src/main/java/org/floens/chan/ui/activity/ImageViewActivity.java
+++ b/Clover/app/src/main/java/org/floens/chan/ui/activity/ImageViewActivity.java
@@ -17,7 +17,6 @@
*/
package org.floens.chan.ui.activity;
-import android.app.ActionBar;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
@@ -26,8 +25,6 @@ import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
-import android.view.Window;
-import android.widget.FrameLayout;
import android.widget.ProgressBar;
import org.floens.chan.R;
@@ -35,12 +32,12 @@ import org.floens.chan.chan.ImageSearch;
import org.floens.chan.core.ChanPreferences;
import org.floens.chan.core.manager.ThreadManager;
import org.floens.chan.core.model.Post;
+import org.floens.chan.ui.ThemeActivity;
import org.floens.chan.ui.adapter.ImageViewAdapter;
import org.floens.chan.ui.adapter.PostAdapter;
import org.floens.chan.ui.fragment.ImageViewFragment;
import org.floens.chan.utils.ImageSaver;
import org.floens.chan.utils.Logger;
-import org.floens.chan.utils.ThemeHelper;
import java.util.ArrayList;
import java.util.List;
@@ -49,15 +46,16 @@ import java.util.List;
* An fragment pager that contains images. Call setPosts first, and then start
* the activity with startActivity()
*/
-public class ImageViewActivity extends Activity implements ViewPager.OnPageChangeListener {
+public class ImageViewActivity extends ThemeActivity implements ViewPager.OnPageChangeListener {
private static final String TAG = "ImageViewActivity";
private static PostAdapter postAdapterStatic;
- private static int selectedIdStatic = -1;
+ private static int selectedNoStatic = -1;
private static ThreadManager threadManagerStatic;
private PostAdapter postAdapter;
private ThreadManager threadManager;
+ private int selectedNo;
private ImageViewAdapter adapter;
private ViewPager viewPager;
@@ -72,7 +70,7 @@ public class ImageViewActivity extends Activity implements ViewPager.OnPageChang
*/
public static void launch(Activity activity, PostAdapter adapter, int selected, ThreadManager threadManager) {
postAdapterStatic = adapter;
- selectedIdStatic = selected;
+ selectedNoStatic = selected;
threadManagerStatic = threadManager;
Intent intent = new Intent(activity, ImageViewActivity.class);
@@ -82,44 +80,36 @@ public class ImageViewActivity extends Activity implements ViewPager.OnPageChang
@Override
protected void onCreate(Bundle savedInstanceState) {
- requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
- ActionBar actionBar = getActionBar();
- actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_HOME_AS_UP);
-
- super.onCreate(savedInstanceState);
-
if (postAdapterStatic == null || threadManagerStatic == null) {
Logger.e(TAG, "postadapter or threadmanager null");
finish();
return;
}
+ super.onCreate(savedInstanceState);
+
threadManager = threadManagerStatic;
threadManagerStatic = null;
postAdapter = postAdapterStatic;
postAdapterStatic = null;
- int selectedId = selectedIdStatic;
- selectedIdStatic = -1;
+ selectedNo = selectedNoStatic;
+ selectedNoStatic = -1;
- ThemeHelper.setTheme(this);
+ setContentView(R.layout.image_view);
+ setToolbar();
- progressBar = new ProgressBar(this, null, android.R.attr.progressBarStyleHorizontal);
- progressBar.setLayoutParams(new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT));
- progressBar.setProgressDrawable(getResources().getDrawable(R.drawable.progressbar_no_bg));
+ initProgressBar();
+ initPager();
+ }
+
+ private void initProgressBar() {
+ progressBar = (ProgressBar) findViewById(R.id.progress_bar);
+// progressBar.setProgressDrawable(getResources().getDrawable(R.drawable.progressbar_no_bg));
progressBar.setIndeterminate(false);
progressBar.setMax(1000000);
+ }
- final FrameLayout decorView = (FrameLayout) getWindow().getDecorView();
- decorView.addView(progressBar);
-
- progressBar.post(new Runnable() {
- @Override
- public void run() {
- View contentView = decorView.findViewById(android.R.id.content);
- progressBar.setY(contentView.getY() - progressBar.getHeight() / 2);
- }
- });
-
+ private void initPager() {
// Get the posts with images
ArrayList imagePosts = new ArrayList<>();
for (Post post : postAdapter.getList()) {
@@ -129,7 +119,6 @@ public class ImageViewActivity extends Activity implements ViewPager.OnPageChang
}
// Setup our pages and adapter
- setContentView(R.layout.image_pager);
viewPager = (ViewPager) findViewById(R.id.image_pager);
adapter = new ImageViewAdapter(getFragmentManager(), this);
adapter.setList(imagePosts);
@@ -138,7 +127,7 @@ public class ImageViewActivity extends Activity implements ViewPager.OnPageChang
// Select the right image
for (int i = 0; i < imagePosts.size(); i++) {
- if (imagePosts.get(i).no == selectedId) {
+ if (imagePosts.get(i).no == selectedNo) {
viewPager.setCurrentItem(i);
onPageSelected(i);
break;
diff --git a/Clover/app/src/main/java/org/floens/chan/ui/activity/PassSettingsActivity.java b/Clover/app/src/main/java/org/floens/chan/ui/activity/PassSettingsActivity.java
index 37bd50fa..a7b1f0a2 100644
--- a/Clover/app/src/main/java/org/floens/chan/ui/activity/PassSettingsActivity.java
+++ b/Clover/app/src/main/java/org/floens/chan/ui/activity/PassSettingsActivity.java
@@ -17,7 +17,6 @@
*/
package org.floens.chan.ui.activity;
-import android.app.Activity;
import android.app.AlertDialog;
import android.app.Fragment;
import android.app.FragmentTransaction;
@@ -25,16 +24,15 @@ import android.app.ProgressDialog;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceFragment;
+import android.support.v7.widget.SwitchCompat;
import android.text.TextUtils;
import android.view.LayoutInflater;
-import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
-import android.widget.Switch;
import android.widget.TextView;
import org.floens.chan.ChanApplication;
@@ -43,54 +41,47 @@ import org.floens.chan.core.ChanPreferences;
import org.floens.chan.core.manager.ReplyManager;
import org.floens.chan.core.manager.ReplyManager.PassResponse;
import org.floens.chan.core.model.Pass;
-import org.floens.chan.utils.ThemeHelper;
+import org.floens.chan.ui.ThemeActivity;
import org.floens.chan.utils.Utils;
-public class PassSettingsActivity extends Activity implements OnCheckedChangeListener {
- private static PassSettingsActivity instance;
-
- private Switch enableSwitch;
+public class PassSettingsActivity extends ThemeActivity implements OnCheckedChangeListener {
+ private SwitchCompat onSwitch;
+ private TextView toggleStatus;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- ThemeHelper.setTheme(this);
-
- instance = this;
+ setTheme();
+ setContentView(R.layout.header_switch_layout);
+ setToolbar();
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
- setFragment(ChanPreferences.getPassEnabled());
- }
+ findViewById(R.id.toggle_bar).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ onSwitch.toggle();
+ }
+ });
- @Override
- protected void onDestroy() {
- super.onDestroy();
+ toggleStatus = (TextView) findViewById(R.id.toggle_status);
+ onSwitch = (SwitchCompat) findViewById(R.id.toggle);
+ onSwitch.setOnCheckedChangeListener(this);
+ setSwitch(ChanPreferences.getPassEnabled());
- instance = null;
+ setFragment(ChanPreferences.getPassEnabled());
}
@Override
- public void onBackPressed() {
- super.onBackPressed();
+ public void onPause() {
+ super.onPause();
if (TextUtils.isEmpty(ChanPreferences.getPassId())) {
ChanPreferences.setPassEnabled(false);
+ setSwitch(false);
}
}
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.action_bar_switch, menu);
-
- enableSwitch = (Switch) menu.findItem(R.id.action_bar_switch).getActionView();
- enableSwitch.setOnCheckedChangeListener(this);
- enableSwitch.setPadding(0, 0, Utils.dp(14), 0);
-
- setSwitch(ChanPreferences.getPassEnabled());
-
- return true;
- }
-
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
setFragment(isChecked);
@@ -98,19 +89,21 @@ public class PassSettingsActivity extends Activity implements OnCheckedChangeLis
}
private void setSwitch(boolean enabled) {
- enableSwitch.setChecked(enabled);
+ onSwitch.setChecked(enabled);
+ toggleStatus.setText(enabled ? R.string.on : R.string.off);
+
ChanPreferences.setPassEnabled(enabled);
}
private void setFragment(boolean enabled) {
if (enabled) {
FragmentTransaction t = getFragmentManager().beginTransaction();
- t.replace(android.R.id.content, new PassSettingsFragment());
+ t.replace(R.id.content, new PassSettingsFragment());
t.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
t.commit();
} else {
FragmentTransaction t = getFragmentManager().beginTransaction();
- t.replace(android.R.id.content, new TextFragment());
+ t.replace(R.id.content, new TextFragment());
t.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
t.commit();
}
@@ -144,10 +137,9 @@ public class PassSettingsActivity extends Activity implements OnCheckedChangeLis
login.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
- if (PassSettingsActivity.instance != null) {
- Pass pass = new Pass(ChanPreferences.getPassToken(), ChanPreferences.getPassPin());
- onLoginClick(pass);
- }
+ Pass pass = new Pass(ChanPreferences.getPassToken(), ChanPreferences.getPassPin());
+ onLoginClick(pass);
+
return true;
}
});
diff --git a/Clover/app/src/main/java/org/floens/chan/ui/activity/ReplyActivity.java b/Clover/app/src/main/java/org/floens/chan/ui/activity/ReplyActivity.java
index ca94e195..04d43ecf 100644
--- a/Clover/app/src/main/java/org/floens/chan/ui/activity/ReplyActivity.java
+++ b/Clover/app/src/main/java/org/floens/chan/ui/activity/ReplyActivity.java
@@ -17,42 +17,44 @@
*/
package org.floens.chan.ui.activity;
-import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.MenuItem;
+import org.floens.chan.R;
import org.floens.chan.core.model.Loadable;
+import org.floens.chan.ui.ThemeActivity;
import org.floens.chan.ui.fragment.ReplyFragment;
import org.floens.chan.utils.Logger;
-import org.floens.chan.utils.ThemeHelper;
-public class ReplyActivity extends Activity {
+public class ReplyActivity extends ThemeActivity {
private static final String TAG = "ReplyActivity";
- private static Loadable loadable;
+ private static Loadable staticLoadable;
public static void setLoadable(Loadable l) {
- loadable = l;
+ staticLoadable = l;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- ThemeHelper.setTheme(this);
+ Loadable loadable = staticLoadable;
+ staticLoadable = null;
if (loadable != null && savedInstanceState == null) {
- getActionBar().setDisplayHomeAsUpEnabled(true);
+ setTheme();
+ setContentView(R.layout.toolbar_activity);
+ setToolbar();
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
FragmentTransaction ft = getFragmentManager().beginTransaction();
- ft.replace(android.R.id.content, ReplyFragment.newInstance(loadable, false), "reply");
+ ft.replace(R.id.content, ReplyFragment.newInstance(loadable, false), "reply");
ft.commitAllowingStateLoss();
-
- loadable = null;
} else if (savedInstanceState == null) {
- Logger.e(TAG, "ThreadFragment was null, exiting!");
+ Logger.e(TAG, "Loadable was null, exiting!");
finish();
}
}
@@ -60,7 +62,7 @@ public class ReplyActivity extends Activity {
@Override
public void onBackPressed() {
Fragment f = getFragmentManager().findFragmentByTag("reply");
- if (f != null && ((ReplyFragment)f).onBackPressed()) {
+ if (f != null && ((ReplyFragment) f).onBackPressed()) {
super.onBackPressed();
}
}
diff --git a/Clover/app/src/main/java/org/floens/chan/ui/activity/SettingsActivity.java b/Clover/app/src/main/java/org/floens/chan/ui/activity/SettingsActivity.java
index f19ecafb..8dd80be0 100644
--- a/Clover/app/src/main/java/org/floens/chan/ui/activity/SettingsActivity.java
+++ b/Clover/app/src/main/java/org/floens/chan/ui/activity/SettingsActivity.java
@@ -17,17 +17,17 @@
*/
package org.floens.chan.ui.activity;
-import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import org.floens.chan.R;
+import org.floens.chan.ui.ThemeActivity;
import org.floens.chan.ui.fragment.SettingsFragment;
import org.floens.chan.utils.ThemeHelper;
-public class SettingsActivity extends Activity {
+public class SettingsActivity extends ThemeActivity {
private static boolean doingThemeRestart = false;
private static ThemeHelper.Theme lastTheme;
@@ -35,15 +35,18 @@ public class SettingsActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ setTheme();
+ setContentView(R.layout.toolbar_activity);
+ setToolbar();
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+
if (!doingThemeRestart) {
lastTheme = ThemeHelper.getInstance().getTheme();
}
- ThemeHelper.setTheme(this);
-
SettingsFragment frag = new SettingsFragment();
frag.setArguments(getIntent().getExtras());
- getFragmentManager().beginTransaction().replace(android.R.id.content, frag).commit();
+ getFragmentManager().beginTransaction().replace(R.id.content, frag).commit();
}
public void restart(Intent intent) {
@@ -77,6 +80,9 @@ public class SettingsActivity extends Activity {
if (item.getItemId() == R.id.action_settings_advanced) {
startActivity(new Intent(this, AdvancedSettingsActivity.class));
return true;
+ } else if (item.getItemId() == android.R.id.home) {
+ finish();
+ return true;
} else {
return super.onOptionsItemSelected(item);
}
diff --git a/Clover/app/src/main/java/org/floens/chan/ui/activity/WatchSettingsActivity.java b/Clover/app/src/main/java/org/floens/chan/ui/activity/WatchSettingsActivity.java
index c18b7053..f308af37 100644
--- a/Clover/app/src/main/java/org/floens/chan/ui/activity/WatchSettingsActivity.java
+++ b/Clover/app/src/main/java/org/floens/chan/ui/activity/WatchSettingsActivity.java
@@ -17,56 +17,52 @@
*/
package org.floens.chan.ui.activity;
-import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.os.Bundle;
-import android.os.Handler;
-import android.os.Looper;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.PreferenceFragment;
-import android.view.Gravity;
+import android.support.v7.widget.SwitchCompat;
import android.view.LayoutInflater;
-import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
-import android.widget.LinearLayout;
-import android.widget.Switch;
import android.widget.TextView;
import org.floens.chan.ChanApplication;
import org.floens.chan.R;
import org.floens.chan.core.ChanPreferences;
-import org.floens.chan.utils.ThemeHelper;
-import org.floens.chan.utils.Utils;
+import org.floens.chan.ui.ThemeActivity;
-public class WatchSettingsActivity extends Activity implements OnCheckedChangeListener {
- private Switch watchSwitch;
+public class WatchSettingsActivity extends ThemeActivity implements OnCheckedChangeListener {
+ private SwitchCompat watchSwitch;
+ private TextView toggleStatus;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- ThemeHelper.setTheme(this);
+ setTheme();
+ setContentView(R.layout.header_switch_layout);
+ setToolbar();
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
- setFragment(ChanPreferences.getWatchEnabled());
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.action_bar_switch, menu);
+ findViewById(R.id.toggle_bar).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ watchSwitch.toggle();
+ }
+ });
- watchSwitch = (Switch) menu.findItem(R.id.action_bar_switch).getActionView();
+ toggleStatus = (TextView) findViewById(R.id.toggle_status);
+ watchSwitch = (SwitchCompat) findViewById(R.id.toggle);
watchSwitch.setOnCheckedChangeListener(this);
- watchSwitch.setPadding(0, 0, Utils.dp(14), 0);
-
setSwitch(ChanPreferences.getWatchEnabled());
- return true;
+ setFragment(ChanPreferences.getWatchEnabled());
}
@Override
@@ -77,30 +73,20 @@ public class WatchSettingsActivity extends Activity implements OnCheckedChangeLi
private void setSwitch(boolean enabled) {
watchSwitch.setChecked(enabled);
+ toggleStatus.setText(enabled ? R.string.on : R.string.off);
ChanPreferences.setWatchEnabled(enabled);
-
- watchSwitch.setEnabled(false);
- new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
- @Override
- public void run() {
- watchSwitch.setEnabled(true);
- }
- }, 500);
}
private void setFragment(boolean enabled) {
+ FragmentTransaction t = getFragmentManager().beginTransaction();
if (enabled) {
- FragmentTransaction t = getFragmentManager().beginTransaction();
- t.replace(android.R.id.content, new WatchSettingsFragment());
- t.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
- t.commit();
+ t.replace(R.id.content, new WatchSettingsFragment());
} else {
- FragmentTransaction t = getFragmentManager().beginTransaction();
- t.replace(android.R.id.content, TextFragment.newInstance(R.string.watch_info_text));
- t.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
- t.commit();
+ t.replace(R.id.content, TextFragment.newInstance(R.string.watch_info_text));
}
+ t.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
+ t.commit();
}
public static class TextFragment extends Fragment {
@@ -114,18 +100,10 @@ public class WatchSettingsActivity extends Activity implements OnCheckedChangeLi
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup group, Bundle savedInstanceState) {
- LinearLayout container = new LinearLayout(inflater.getContext());
-
- int p = Utils.dp(14);
- container.setPadding(p, p, p, p);
+ ViewGroup container = (ViewGroup) inflater.inflate(R.layout.watch_description, null);
- TextView text = new TextView(inflater.getContext());
- text.setTextSize(20);
+ TextView text = (TextView) container.findViewById(R.id.text);
text.setText(getArguments().getInt("text_resource"));
- text.setGravity(Gravity.CENTER);
-
- container.setGravity(Gravity.CENTER);
- container.addView(text);
return container;
}
diff --git a/Clover/app/src/main/java/org/floens/chan/ui/fragment/ImageViewFragment.java b/Clover/app/src/main/java/org/floens/chan/ui/fragment/ImageViewFragment.java
index 1ff8fc4f..c509fcf1 100644
--- a/Clover/app/src/main/java/org/floens/chan/ui/fragment/ImageViewFragment.java
+++ b/Clover/app/src/main/java/org/floens/chan/ui/fragment/ImageViewFragment.java
@@ -21,6 +21,7 @@ import android.app.AlertDialog;
import android.app.Fragment;
import android.content.Context;
import android.content.DialogInterface;
+import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
@@ -82,7 +83,7 @@ public class ImageViewFragment extends Fragment implements ThumbnailImageViewCal
imageView = new ThumbnailImageView(context);
imageView.setCallback(this);
- int padding = Utils.dp(8);
+ int padding = getResources().getDimensionPixelSize(R.dimen.image_view_padding);
imageView.setPadding(padding, padding, padding, padding);
return imageView;
@@ -177,10 +178,10 @@ public class ImageViewFragment extends Fragment implements ThumbnailImageViewCal
activity.setProgressBarIndeterminateVisibility(showProgressBar);
String filename = post.filename + "." + post.ext;
- activity.getActionBar().setTitle(filename);
+ activity.getSupportActionBar().setTitle(filename);
String text = (position + 1) + "/" + adapter.getCount();
- activity.getActionBar().setSubtitle(text);
+ activity.getSupportActionBar().setSubtitle(text);
activity.invalidateActionBar();
@@ -241,9 +242,13 @@ public class ImageViewFragment extends Fragment implements ThumbnailImageViewCal
break;
case R.id.action_image_save:
case R.id.action_share:
- ImageSaver.getInstance().saveImage(context, post.imageUrl,
- ChanPreferences.getImageSaveOriginalFilename() ? Long.toString(post.tim) : post.filename, post.ext,
- item.getItemId() == R.id.action_share);
+ if (ChanPreferences.getImageShareUrl()) {
+ shareImageUrl(post.imageUrl);
+ } else {
+ ImageSaver.getInstance().saveImage(context, post.imageUrl,
+ ChanPreferences.getImageSaveOriginalFilename() ? Long.toString(post.tim) : post.filename, post.ext,
+ item.getItemId() == R.id.action_share);
+ }
break;
default:
// Search if it was an ImageSearch item
@@ -258,6 +263,13 @@ public class ImageViewFragment extends Fragment implements ThumbnailImageViewCal
}
}
+ private void shareImageUrl(String url) {
+ Intent intent = new Intent(Intent.ACTION_SEND);
+ intent.setType("text/plain");
+ intent.putExtra(Intent.EXTRA_TEXT, url);
+ context.startActivity(Intent.createChooser(intent, context.getString(R.string.action_share)));
+ }
+
public void onVideoError(File video) {
if (ChanPreferences.getVideoErrorIgnore()) {
Toast.makeText(context, R.string.image_open_failed, Toast.LENGTH_SHORT).show();
diff --git a/Clover/app/src/main/java/org/floens/chan/ui/fragment/ReplyFragment.java b/Clover/app/src/main/java/org/floens/chan/ui/fragment/ReplyFragment.java
index 9a223eae..6a6da66a 100644
--- a/Clover/app/src/main/java/org/floens/chan/ui/fragment/ReplyFragment.java
+++ b/Clover/app/src/main/java/org/floens/chan/ui/fragment/ReplyFragment.java
@@ -17,12 +17,12 @@
*/
package org.floens.chan.ui.fragment;
-import android.app.Activity;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.os.Bundle;
+import android.support.v7.app.ActionBarActivity;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
@@ -106,7 +106,7 @@ public class ReplyFragment extends DialogFragment {
private TextView commentCountView;
private TextView fileStatusView;
- private Activity context;
+ private ActionBarActivity context;
public static ReplyFragment newInstance(Loadable loadable, boolean quickMode) {
ReplyFragment reply = new ReplyFragment();
@@ -127,7 +127,7 @@ public class ReplyFragment extends DialogFragment {
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
- context = getActivity();
+ context = (ActionBarActivity) getActivity();
if (loadable == null && savedInstanceState != null) {
loadable = new Loadable();
@@ -142,7 +142,7 @@ public class ReplyFragment extends DialogFragment {
String title = (loadable.isThreadMode() ? context.getString(R.string.reply) : context.getString(R.string.reply_to_board)) + " " + loadable.title;
if (dialog == null) {
- context.getActionBar().setTitle(title);
+ context.getSupportActionBar().setTitle(title);
} else {
dialog.setTitle(title);
// todo move elsewhere
diff --git a/Clover/app/src/main/java/org/floens/chan/ui/fragment/ThreadFragment.java b/Clover/app/src/main/java/org/floens/chan/ui/fragment/ThreadFragment.java
index 00c7f01e..4c46e4a1 100644
--- a/Clover/app/src/main/java/org/floens/chan/ui/fragment/ThreadFragment.java
+++ b/Clover/app/src/main/java/org/floens/chan/ui/fragment/ThreadFragment.java
@@ -19,7 +19,6 @@ package org.floens.chan.ui.fragment;
import android.app.Fragment;
import android.content.Context;
-import android.content.res.TypedArray;
import android.os.Bundle;
import android.util.AttributeSet;
import android.view.Gravity;
@@ -327,13 +326,8 @@ public class ThreadFragment extends Fragment implements ThreadManager.ThreadMana
} else if (viewMode == ThreadManager.ViewMode.GRID) {
GridView grid = new GridView(getActivity());
grid.setNumColumns(GridView.AUTO_FIT);
- TypedArray ta = getActivity().obtainStyledAttributes(null, R.styleable.PostView, R.attr.post_style, 0);
- int postGridWidth = ta.getDimensionPixelSize(R.styleable.PostView_grid_width, 0);
- int postGridSpacing = ta.getDimensionPixelSize(R.styleable.PostView_grid_spacing, 0);
- ta.recycle();
+ int postGridWidth = getActivity().getResources().getDimensionPixelSize(R.dimen.post_grid_width);
grid.setColumnWidth(postGridWidth);
- grid.setVerticalSpacing(postGridSpacing);
- grid.setHorizontalSpacing(postGridSpacing);
listView = grid;
postAdapter = new PostAdapter(getActivity(), threadManager, listView, this);
listView.setAdapter(postAdapter);
diff --git a/Clover/app/src/main/java/org/floens/chan/ui/view/ThumbnailImageView.java b/Clover/app/src/main/java/org/floens/chan/ui/view/ThumbnailImageView.java
index fd9945da..773b1141 100644
--- a/Clover/app/src/main/java/org/floens/chan/ui/view/ThumbnailImageView.java
+++ b/Clover/app/src/main/java/org/floens/chan/ui/view/ThumbnailImageView.java
@@ -125,7 +125,7 @@ public class ThumbnailImageView extends LoadView implements View.OnClickListener
@Override
public void onProgress(long downloaded, long total, boolean done) {
if (done) {
- callback.setLinearProgress(0, 0, true);
+// callback.setLinearProgress(0, 0, true);
thumbnailNeeded = false;
} else {
callback.setLinearProgress(downloaded, total, false);
diff --git a/Clover/app/src/main/res/anim/fade_in.xml b/Clover/app/src/main/res/anim/fade_in.xml
index 0cf24af2..11e35412 100644
--- a/Clover/app/src/main/res/anim/fade_in.xml
+++ b/Clover/app/src/main/res/anim/fade_in.xml
@@ -1,5 +1,4 @@
-
-
-
-
-
+
+
diff --git a/Clover/app/src/main/res/drawable/pin_icon_gray.xml b/Clover/app/src/main/res/drawable/pin_icon_gray.xml
index a48eb43a..11e275a6 100644
--- a/Clover/app/src/main/res/drawable/pin_icon_gray.xml
+++ b/Clover/app/src/main/res/drawable/pin_icon_gray.xml
@@ -1,5 +1,4 @@
-
-
-
-
-
+
+
diff --git a/Clover/app/src/main/res/drawable/pin_icon_red.xml b/Clover/app/src/main/res/drawable/pin_icon_red.xml
index eb1f09c4..0dcb2264 100644
--- a/Clover/app/src/main/res/drawable/pin_icon_red.xml
+++ b/Clover/app/src/main/res/drawable/pin_icon_red.xml
@@ -1,5 +1,4 @@
-
-
-
-
-
+
+
diff --git a/Clover/app/src/main/res/layout/activity_base.xml b/Clover/app/src/main/res/layout/activity_base.xml
index 807c7e20..ca9b9b24 100644
--- a/Clover/app/src/main/res/layout/activity_base.xml
+++ b/Clover/app/src/main/res/layout/activity_base.xml
@@ -1,5 +1,4 @@
-
-
-
-
-
-
-
-
-
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+
+
+
+
+
+
+
+
+
+
.
android:background="#444"
android:choiceMode="singleChoice"
android:divider="#333"
- android:dividerHeight="1dp"/>
+ android:dividerHeight="1dp" />
diff --git a/Clover/app/src/main/res/layout/board_edit_item.xml b/Clover/app/src/main/res/layout/board_edit_item.xml
index ea8e2c3d..476ab90d 100644
--- a/Clover/app/src/main/res/layout/board_edit_item.xml
+++ b/Clover/app/src/main/res/layout/board_edit_item.xml
@@ -1,5 +1,4 @@
-
-
-
@@ -30,7 +28,7 @@ along with this program. If not, see .
android:paddingBottom="12dp"
android:paddingLeft="16dp"
android:paddingTop="12dp"
- style="?attr/board_edit_item_style"/>
+ style="?attr/board_edit_item_style" />
.
android:layout_marginLeft="36dp"
android:gravity="center_vertical"
android:minHeight="50sp"
- android:textSize="24sp"/>
+ android:textSize="24sp" />
diff --git a/Clover/app/src/main/res/layout/board_select_add.xml b/Clover/app/src/main/res/layout/board_select_add.xml
index 1b76c3aa..1a98c6f9 100644
--- a/Clover/app/src/main/res/layout/board_select_add.xml
+++ b/Clover/app/src/main/res/layout/board_select_add.xml
@@ -1,5 +1,4 @@
-
-
-
+ android:ellipsize="end" />
diff --git a/Clover/app/src/main/res/layout/board_select_spinner.xml b/Clover/app/src/main/res/layout/board_select_spinner.xml
index 303ad9ae..7c5d7805 100644
--- a/Clover/app/src/main/res/layout/board_select_spinner.xml
+++ b/Clover/app/src/main/res/layout/board_select_spinner.xml
@@ -1,5 +1,4 @@
-
-
-
+ android:ellipsize="end" />
diff --git a/Clover/app/src/main/res/layout/board_select_spinner_dropdown.xml b/Clover/app/src/main/res/layout/board_select_spinner_dropdown.xml
new file mode 100644
index 00000000..320a59b8
--- /dev/null
+++ b/Clover/app/src/main/res/layout/board_select_spinner_dropdown.xml
@@ -0,0 +1,29 @@
+
+
diff --git a/Clover/app/src/main/res/layout/folder_pick.xml b/Clover/app/src/main/res/layout/folder_pick.xml
index 6e91a38d..c201752b 100644
--- a/Clover/app/src/main/res/layout/folder_pick.xml
+++ b/Clover/app/src/main/res/layout/folder_pick.xml
@@ -85,7 +85,7 @@ along with this program. If not, see .
+ android:background="@android:color/darker_gray" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Clover/app/src/main/res/layout/image_view.xml b/Clover/app/src/main/res/layout/image_view.xml
new file mode 100644
index 00000000..beac169b
--- /dev/null
+++ b/Clover/app/src/main/res/layout/image_view.xml
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Clover/app/src/main/res/layout/preference_pass.xml b/Clover/app/src/main/res/layout/preference_pass.xml
index 5860e0d3..d86b4a45 100644
--- a/Clover/app/src/main/res/layout/preference_pass.xml
+++ b/Clover/app/src/main/res/layout/preference_pass.xml
@@ -1,5 +1,4 @@
-
-
-
+ android:gravity="center"
+ android:padding="24dp">
+ style="?android:attr/textAppearanceMedium" />
.
android:text="@string/pass_info_learn_more"
android:textColor="@android:color/holo_blue_light"
android:textSize="20sp"
- android:textStyle="italic"/>
+ android:textStyle="italic" />
\ No newline at end of file
diff --git a/Clover/app/src/main/res/layout/toolbar.xml b/Clover/app/src/main/res/layout/toolbar.xml
new file mode 100644
index 00000000..8f4382cd
--- /dev/null
+++ b/Clover/app/src/main/res/layout/toolbar.xml
@@ -0,0 +1,26 @@
+
+
diff --git a/Clover/app/src/main/res/layout/image_pager.xml b/Clover/app/src/main/res/layout/toolbar_activity.xml
similarity index 60%
rename from Clover/app/src/main/res/layout/image_pager.xml
rename to Clover/app/src/main/res/layout/toolbar_activity.xml
index 08bd2fc2..30f79740 100644
--- a/Clover/app/src/main/res/layout/image_pager.xml
+++ b/Clover/app/src/main/res/layout/toolbar_activity.xml
@@ -1,5 +1,4 @@
-
-
-
+ android:layout_height="match_parent">
-
+
+
-
-
-
\ No newline at end of file
+ android:layout_height="wrap_content" />
+
+
\ No newline at end of file
diff --git a/Clover/app/src/main/res/layout/watch_description.xml b/Clover/app/src/main/res/layout/watch_description.xml
new file mode 100644
index 00000000..9f2e53c9
--- /dev/null
+++ b/Clover/app/src/main/res/layout/watch_description.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
diff --git a/Clover/app/src/main/res/menu/action_bar_switch.xml b/Clover/app/src/main/res/menu/action_bar_switch.xml
index 9b901b8e..42c467d3 100644
--- a/Clover/app/src/main/res/menu/action_bar_switch.xml
+++ b/Clover/app/src/main/res/menu/action_bar_switch.xml
@@ -1,5 +1,4 @@
-
-
-