diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7be1c9ff..e08357e0 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -16,5 +16,13 @@ + + + + diff --git a/app/src/main/java/com/simplemobiletools/filemanager/Config.java b/app/src/main/java/com/simplemobiletools/filemanager/Config.java new file mode 100644 index 00000000..af6c4d88 --- /dev/null +++ b/app/src/main/java/com/simplemobiletools/filemanager/Config.java @@ -0,0 +1,24 @@ +package com.simplemobiletools.filemanager; + +import android.content.Context; +import android.content.SharedPreferences; + +public class Config { + private SharedPreferences mPrefs; + + public static Config newInstance(Context context) { + return new Config(context); + } + + public Config(Context context) { + mPrefs = context.getSharedPreferences(Constants.PREFS_KEY, Context.MODE_PRIVATE); + } + + public boolean getIsFirstRun() { + return mPrefs.getBoolean(Constants.IS_FIRST_RUN, true); + } + + public void setIsFirstRun(boolean firstRun) { + mPrefs.edit().putBoolean(Constants.IS_FIRST_RUN, firstRun).apply(); + } +} diff --git a/app/src/main/java/com/simplemobiletools/filemanager/Constants.java b/app/src/main/java/com/simplemobiletools/filemanager/Constants.java index e2dcd969..c9b362fe 100644 --- a/app/src/main/java/com/simplemobiletools/filemanager/Constants.java +++ b/app/src/main/java/com/simplemobiletools/filemanager/Constants.java @@ -2,4 +2,8 @@ package com.simplemobiletools.filemanager; public class Constants { public static final String PATH = "path"; + + // shared preferences + public static final String PREFS_KEY = "File Manager"; + public static final String IS_FIRST_RUN = "is_first_run"; } diff --git a/app/src/main/java/com/simplemobiletools/filemanager/activities/AboutActivity.java b/app/src/main/java/com/simplemobiletools/filemanager/activities/AboutActivity.java new file mode 100644 index 00000000..39e7cafb --- /dev/null +++ b/app/src/main/java/com/simplemobiletools/filemanager/activities/AboutActivity.java @@ -0,0 +1,98 @@ +package com.simplemobiletools.filemanager.activities; + +import android.content.ActivityNotFoundException; +import android.content.Intent; +import android.content.res.Resources; +import android.net.Uri; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.text.Html; +import android.text.method.LinkMovementMethod; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.TextView; + +import com.simplemobiletools.filemanager.BuildConfig; +import com.simplemobiletools.filemanager.Config; +import com.simplemobiletools.filemanager.R; + +import java.util.Calendar; + +import butterknife.BindView; +import butterknife.ButterKnife; +import butterknife.OnClick; + +public class AboutActivity extends AppCompatActivity { + @BindView(R.id.about_copyright) TextView mCopyright; + @BindView(R.id.about_email) TextView mEmailTV; + @BindView(R.id.about_rate_us) View mRateUs; + + private static Resources mRes; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_about); + ButterKnife.bind(this); + mRes = getResources(); + + setupEmail(); + setupCopyright(); + setupRateUs(); + } + + private void setupEmail() { + final String email = mRes.getString(R.string.email); + final String appName = mRes.getString(R.string.app_name); + final String href = "" + email + ""; + mEmailTV.setText(Html.fromHtml(href)); + mEmailTV.setMovementMethod(LinkMovementMethod.getInstance()); + } + + private void setupCopyright() { + final String versionName = BuildConfig.VERSION_NAME; + final int year = Calendar.getInstance().get(Calendar.YEAR); + final String copyrightText = String.format(mRes.getString(R.string.copyright), versionName, year); + mCopyright.setText(copyrightText); + } + + private void setupRateUs() { + if (Config.newInstance(getApplicationContext()).getIsFirstRun()) { + mRateUs.setVisibility(View.GONE); + } + } + + @OnClick(R.id.about_rate_us) + public void rateUsClicked() { + final Uri uri = Uri.parse("market://details?id=" + getPackageName()); + try { + startActivity(new Intent(Intent.ACTION_VIEW, uri)); + } catch (ActivityNotFoundException ignored) { + startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=" + getPackageName()))); + } + } + + @OnClick(R.id.about_license) + public void licenseClicked() { + final Intent intent = new Intent(getApplicationContext(), LicenseActivity.class); + startActivity(intent); + } + + @OnClick(R.id.about_facebook) + public void facebookClicked() { + String link = "https://www.facebook.com/simplemobiletools"; + try { + getPackageManager().getPackageInfo("com.facebook.katana", 0); + link = "fb://page/150270895341774"; + } catch (Exception ignored) { + } + startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(link))); + } + + @OnClick(R.id.about_gplus) + public void googlePlusClicked() { + final String link = "https://plus.google.com/communities/104880861558693868382"; + startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(link))); + } +} diff --git a/app/src/main/java/com/simplemobiletools/filemanager/activities/LicenseActivity.java b/app/src/main/java/com/simplemobiletools/filemanager/activities/LicenseActivity.java new file mode 100644 index 00000000..440ee8b0 --- /dev/null +++ b/app/src/main/java/com/simplemobiletools/filemanager/activities/LicenseActivity.java @@ -0,0 +1,32 @@ +package com.simplemobiletools.filemanager.activities; + +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; + +import com.simplemobiletools.filemanager.R; + +import butterknife.ButterKnife; +import butterknife.OnClick; + +public class LicenseActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_license); + ButterKnife.bind(this); + } + + @OnClick(R.id.license_butterknife_title) + public void butterKnifeClicked() { + openUrl(R.string.butterknife_url); + } + + private void openUrl(int id) { + final String url = getResources().getString(id); + final Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); + startActivity(browserIntent); + } +} diff --git a/app/src/main/java/com/simplemobiletools/filemanager/activities/MainActivity.java b/app/src/main/java/com/simplemobiletools/filemanager/activities/MainActivity.java index 372ae1cc..b4268591 100644 --- a/app/src/main/java/com/simplemobiletools/filemanager/activities/MainActivity.java +++ b/app/src/main/java/com/simplemobiletools/filemanager/activities/MainActivity.java @@ -1,13 +1,17 @@ package com.simplemobiletools.filemanager.activities; import android.Manifest; +import android.content.Intent; import android.content.pm.PackageManager; import android.os.Bundle; import android.os.Environment; import android.support.v4.app.ActivityCompat; import android.support.v4.app.FragmentManager; import android.support.v7.app.AppCompatActivity; +import android.view.Menu; +import android.view.MenuItem; +import com.simplemobiletools.filemanager.Config; import com.simplemobiletools.filemanager.Constants; import com.simplemobiletools.filemanager.R; import com.simplemobiletools.filemanager.Utils; @@ -26,6 +30,12 @@ public class MainActivity extends AppCompatActivity implements ItemsFragment.Ite tryInitFileManager(); } + @Override + protected void onDestroy() { + super.onDestroy(); + Config.newInstance(getApplicationContext()).setIsFirstRun(false); + } + private void tryInitFileManager() { if (Utils.hasStoragePermission(getApplicationContext())) { initRootFileManager(); @@ -51,6 +61,24 @@ public class MainActivity extends AppCompatActivity implements ItemsFragment.Ite getSupportFragmentManager().beginTransaction().replace(R.id.fragment_holder, fragment).addToBackStack(path).commit(); } + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.menu, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.about: + final Intent intent = new Intent(getApplicationContext(), AboutActivity.class); + startActivity(intent); + return true; + default: + return super.onOptionsItemSelected(item); + } + } + @Override public void onBackPressed() { final FragmentManager manager = getSupportFragmentManager(); diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml new file mode 100644 index 00000000..8ec0b9e3 --- /dev/null +++ b/app/src/main/res/layout/activity_about.xml @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_license.xml b/app/src/main/res/layout/activity_license.xml new file mode 100644 index 00000000..3dfaabdb --- /dev/null +++ b/app/src/main/res/layout/activity_license.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + diff --git a/app/src/main/res/menu/menu.xml b/app/src/main/res/menu/menu.xml new file mode 100644 index 00000000..0cce6d24 --- /dev/null +++ b/app/src/main/res/menu/menu.xml @@ -0,0 +1,8 @@ + + + + diff --git a/app/src/main/res/mipmap-hdpi/facebook.png b/app/src/main/res/mipmap-hdpi/facebook.png new file mode 100644 index 00000000..6cfa1da4 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/facebook.png differ diff --git a/app/src/main/res/mipmap-hdpi/gplus.png b/app/src/main/res/mipmap-hdpi/gplus.png new file mode 100644 index 00000000..897f103c Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/gplus.png differ diff --git a/app/src/main/res/mipmap-mdpi/facebook.png b/app/src/main/res/mipmap-mdpi/facebook.png new file mode 100644 index 00000000..4fa29a30 Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/facebook.png differ diff --git a/app/src/main/res/mipmap-mdpi/gplus.png b/app/src/main/res/mipmap-mdpi/gplus.png new file mode 100644 index 00000000..54f1b83e Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/gplus.png differ diff --git a/app/src/main/res/mipmap-xhdpi/facebook.png b/app/src/main/res/mipmap-xhdpi/facebook.png new file mode 100644 index 00000000..6a605585 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/facebook.png differ diff --git a/app/src/main/res/mipmap-xhdpi/gplus.png b/app/src/main/res/mipmap-xhdpi/gplus.png new file mode 100644 index 00000000..47bd6ef3 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/gplus.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/facebook.png b/app/src/main/res/mipmap-xxhdpi/facebook.png new file mode 100644 index 00000000..6b35ed6a Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/facebook.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/gplus.png b/app/src/main/res/mipmap-xxhdpi/gplus.png new file mode 100644 index 00000000..d580cd5f Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/gplus.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/facebook.png b/app/src/main/res/mipmap-xxxhdpi/facebook.png new file mode 100644 index 00000000..4d24332a Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/facebook.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/gplus.png b/app/src/main/res/mipmap-xxxhdpi/gplus.png new file mode 100644 index 00000000..932c51ae Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/gplus.png differ diff --git a/app/src/main/res/values-sw600dp/dimens.xml b/app/src/main/res/values-sw600dp/dimens.xml index 4dfd9d29..6ff086cf 100644 --- a/app/src/main/res/values-sw600dp/dimens.xml +++ b/app/src/main/res/values-sw600dp/dimens.xml @@ -1,3 +1,7 @@ + 12dp + 50dp + 12dp + 18sp diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 4edf4c29..99cca20b 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -1,6 +1,10 @@ 16dp - 14sp 8dp 44dp + 8dp + 40dp + 8dp + + 14sp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index aa7880b5..4f5a1a85 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -2,4 +2,21 @@ Simple File Manager We need the permission to access your storage No app for opening this type of files is available + + + About + More simple apps and source code at:\nhttp://simplemobiletools.com + Send your feedback or suggestions to: + hello@simplemobiletools.com + Third party licences + Rate us in the Play Store + Follow us: + v %1$s\nCopyright © Simple Mobile Tools %2$d + + + This app uses the following third party libraries to make my life easier. Thank you. + Third party licences + Butter Knife (view injector) + Copyright 2013 Jake Wharton\n\nLicensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.You may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions and limitations under the License. + https://github.com/JakeWharton/butterknife