Austin Huang
4 years ago
No known key found for this signature in database
GPG Key ID: 84C23AA04587A91F
26 changed files with 1119 additions and 262 deletions
-
40LICENSE
-
11app/src/main/AndroidManifest.xml
-
15app/src/main/java/awais/instagrabber/activities/CommentsViewer.java
-
6app/src/main/java/awais/instagrabber/activities/FollowViewer.java
-
2app/src/main/java/awais/instagrabber/activities/Main.java
-
13app/src/main/java/awais/instagrabber/activities/PostViewer.java
-
214app/src/main/java/awais/instagrabber/activities/ProfilePicViewer.java
-
940app/src/main/java/awais/instagrabber/activities/ProfileViewer.java
-
11app/src/main/java/awais/instagrabber/activities/StoryViewer.java
-
4app/src/main/java/awais/instagrabber/asyncs/DownloadAsync.java
-
2app/src/main/java/awais/instagrabber/dialogs/AboutDialog.java
-
26app/src/main/res/layout/activity_profile.xml
-
37app/src/main/res/layout/activity_profilepic.xml
-
10app/src/main/res/layout/dialog_main_about.xml
-
1app/src/main/res/values-de/strings.xml
-
1app/src/main/res/values-es/strings.xml
-
1app/src/main/res/values-fr/strings.xml
-
1app/src/main/res/values-in/strings.xml
-
1app/src/main/res/values-it/strings.xml
-
1app/src/main/res/values-pl/strings.xml
-
1app/src/main/res/values-pt/strings.xml
-
1app/src/main/res/values-ru/strings.xml
-
1app/src/main/res/values-tr/strings.xml
-
2app/src/main/res/values-zh/strings.xml
-
3app/src/main/res/values/strings.xml
-
2build.gradle
@ -619,43 +619,3 @@ Program, unless a warranty or assumption of liability accompanies a |
|||
copy of the Program in return for a fee. |
|||
|
|||
END OF TERMS AND CONDITIONS |
|||
|
|||
How to Apply These Terms to Your New Programs |
|||
|
|||
If you develop a new program, and you want it to be of the greatest |
|||
possible use to the public, the best way to achieve this is to make it |
|||
free software which everyone can redistribute and change under these terms. |
|||
|
|||
To do so, attach the following notices to the program. It is safest |
|||
to attach them to the start of each source file to most effectively |
|||
state the exclusion of warranty; and each file should have at least |
|||
the "copyright" line and a pointer to where the full notice is found. |
|||
|
|||
InstaGrabber |
|||
Copyright (C) 2019 AWAiS <[email protected]> |
|||
Copyright (C) 2020 Austin Huang <[email protected]> |
|||
Ammar Githam <[email protected]> |
|||
|
|||
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 <http://www.gnu.org/licenses/>. |
|||
|
|||
Also add information on how to contact you by electronic and paper mail. |
|||
|
|||
[we're not terminal program, redacted] |
|||
|
|||
The GNU General Public License does not permit incorporating your program |
|||
into proprietary programs. If your program is a subroutine library, you |
|||
may consider it more useful to permit linking proprietary applications with |
|||
the library. If this is what you want to do, use the GNU Lesser General |
|||
Public License instead of this License. But first, please read |
|||
<http://www.gnu.org/philosophy/why-not-lgpl.html>. |
@ -0,0 +1,214 @@ |
|||
package awais.instagrabber.activities; |
|||
|
|||
import android.content.Intent; |
|||
import android.graphics.Bitmap; |
|||
import android.graphics.drawable.BitmapDrawable; |
|||
import android.graphics.drawable.Drawable; |
|||
import android.os.AsyncTask; |
|||
import android.os.Bundle; |
|||
import android.os.Environment; |
|||
import android.view.Menu; |
|||
import android.view.MenuItem; |
|||
import android.view.View; |
|||
import android.widget.Toast; |
|||
|
|||
import androidx.annotation.Nullable; |
|||
import androidx.fragment.app.FragmentManager; |
|||
|
|||
import com.bumptech.glide.Glide; |
|||
import com.bumptech.glide.RequestManager; |
|||
import com.bumptech.glide.load.DataSource; |
|||
import com.bumptech.glide.load.engine.GlideException; |
|||
import com.bumptech.glide.request.RequestListener; |
|||
import com.bumptech.glide.request.target.Target; |
|||
|
|||
import java.io.File; |
|||
|
|||
import awais.instagrabber.R; |
|||
import awais.instagrabber.asyncs.DownloadAsync; |
|||
import awais.instagrabber.asyncs.ProfilePictureFetcher; |
|||
import awais.instagrabber.databinding.ActivityProfilepicBinding; |
|||
import awais.instagrabber.interfaces.FetchListener; |
|||
import awais.instagrabber.models.HashtagModel; |
|||
import awais.instagrabber.models.LocationModel; |
|||
import awais.instagrabber.models.ProfileModel; |
|||
import awais.instagrabber.utils.Constants; |
|||
import awais.instagrabber.utils.Utils; |
|||
|
|||
public final class ProfilePicViewer extends BaseLanguageActivity { |
|||
private ActivityProfilepicBinding profileBinding; |
|||
private ProfileModel profileModel; |
|||
private HashtagModel hashtagModel; |
|||
private LocationModel locationModel; |
|||
private MenuItem menuItemDownload; |
|||
private String profilePicUrl; |
|||
private FragmentManager fragmentManager; |
|||
private FetchListener<String> fetchListener; |
|||
private boolean errorHandled = false; |
|||
private boolean fallbackToProfile = false; |
|||
private boolean destroyed = false; |
|||
|
|||
@Override |
|||
protected void onCreate(@Nullable final Bundle savedInstanceState) { |
|||
super.onCreate(savedInstanceState); |
|||
profileBinding = ActivityProfilepicBinding.inflate(getLayoutInflater()); |
|||
setContentView(profileBinding.getRoot()); |
|||
|
|||
setSupportActionBar(profileBinding.toolbar.toolbar); |
|||
|
|||
final Intent intent = getIntent(); |
|||
if (intent == null || (!intent.hasExtra(Constants.EXTRAS_PROFILE) && !intent.hasExtra(Constants.EXTRAS_HASHTAG) && !intent.hasExtra(Constants.EXTRAS_LOCATION)) |
|||
|| ((profileModel = (ProfileModel) intent.getSerializableExtra(Constants.EXTRAS_PROFILE)) == null |
|||
&& (hashtagModel = (HashtagModel) intent.getSerializableExtra(Constants.EXTRAS_HASHTAG)) == null |
|||
&& (locationModel = (LocationModel) intent.getSerializableExtra(Constants.EXTRAS_LOCATION)) == null)) { |
|||
Utils.errorFinish(this); |
|||
return; |
|||
} |
|||
|
|||
fragmentManager = getSupportFragmentManager(); |
|||
|
|||
final String id = hashtagModel != null ? hashtagModel.getId() : (locationModel != null ? locationModel.getId() : profileModel.getId()); |
|||
final String username = hashtagModel != null ? hashtagModel.getName() : (locationModel != null ? locationModel.getName() : profileModel.getUsername()); |
|||
|
|||
profileBinding.toolbar.toolbar.setTitle(username); |
|||
|
|||
profileBinding.progressView.setVisibility(View.VISIBLE); |
|||
profileBinding.imageViewer.setVisibility(View.VISIBLE); |
|||
|
|||
profileBinding.imageViewer.setZoomable(true); |
|||
profileBinding.imageViewer.setZoomTransitionDuration(420); |
|||
profileBinding.imageViewer.setMaximumScale(7.2f); |
|||
|
|||
fetchListener = profileUrl -> { |
|||
profilePicUrl = profileUrl; |
|||
|
|||
if (!fallbackToProfile && Utils.isEmpty(profilePicUrl)) { |
|||
fallbackToProfile = true; |
|||
new ProfilePictureFetcher(username, id, fetchListener, profilePicUrl, (hashtagModel != null || locationModel != null)).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); |
|||
return; |
|||
} |
|||
|
|||
if (errorHandled && fallbackToProfile || Utils.isEmpty(profilePicUrl)) |
|||
profilePicUrl = hashtagModel != null ? hashtagModel.getSdProfilePic() : (locationModel != null ? locationModel.getSdProfilePic() : profileModel.getHdProfilePic()); |
|||
|
|||
if (destroyed == true) return; |
|||
|
|||
final RequestManager glideRequestManager = Glide.with(this); |
|||
|
|||
glideRequestManager.load(profilePicUrl).addListener(new RequestListener<Drawable>() { |
|||
@Override |
|||
public boolean onLoadFailed(@Nullable final GlideException e, final Object model, final Target<Drawable> target, final boolean isFirstResource) { |
|||
fallbackToProfile = true; |
|||
if (!errorHandled) { |
|||
errorHandled = true; |
|||
new ProfilePictureFetcher(username, id, fetchListener, profilePicUrl, (hashtagModel != null || locationModel != null)) |
|||
.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); |
|||
} else { |
|||
glideRequestManager.load(profilePicUrl).into(profileBinding.imageViewer); |
|||
showImageInfo(); |
|||
} |
|||
profileBinding.progressView.setVisibility(View.GONE); |
|||
return false; |
|||
} |
|||
|
|||
@Override |
|||
public boolean onResourceReady(final Drawable resource, final Object model, final Target<Drawable> target, final DataSource dataSource, final boolean isFirstResource) { |
|||
if (menuItemDownload != null) menuItemDownload.setEnabled(true); |
|||
showImageInfo(); |
|||
profileBinding.progressView.setVisibility(View.GONE); |
|||
return false; |
|||
} |
|||
|
|||
private void showImageInfo() { |
|||
final Drawable drawable = profileBinding.imageViewer.getDrawable(); |
|||
if (drawable != null) { |
|||
final StringBuilder info = new StringBuilder(getString(R.string.profile_viewer_imageinfo, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight())); |
|||
if (drawable instanceof BitmapDrawable) { |
|||
final Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap(); |
|||
if (bitmap != null) { |
|||
final String colorDepthPrefix = getString(R.string.profile_viewer_colordepth_prefix); |
|||
switch (bitmap.getConfig()) { |
|||
case ALPHA_8: |
|||
info.append(colorDepthPrefix).append(" 8-bits(A)"); |
|||
break; |
|||
case RGB_565: |
|||
info.append(colorDepthPrefix).append(" 16-bits-A"); |
|||
break; |
|||
case ARGB_4444: |
|||
info.append(colorDepthPrefix).append(" 16-bits+A"); |
|||
break; |
|||
case ARGB_8888: |
|||
info.append(colorDepthPrefix).append(" 32-bits+A"); |
|||
break; |
|||
case RGBA_F16: |
|||
info.append(colorDepthPrefix).append(" 64-bits+A"); |
|||
break; |
|||
case HARDWARE: |
|||
info.append(colorDepthPrefix).append(" auto"); |
|||
break; |
|||
} |
|||
} |
|||
} |
|||
profileBinding.imageInfo.setText(info); |
|||
profileBinding.imageInfo.setVisibility(View.VISIBLE); |
|||
} |
|||
} |
|||
}).into(profileBinding.imageViewer); |
|||
}; |
|||
|
|||
new ProfilePictureFetcher(username, id, fetchListener, profilePicUrl, (hashtagModel != null || locationModel != null)) |
|||
.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); |
|||
} |
|||
|
|||
private void downloadProfilePicture() { |
|||
int error = 0; |
|||
|
|||
if (profileModel != null) { |
|||
final File dir = new File(Environment.getExternalStorageDirectory(), "Download"); |
|||
if (dir.exists() || dir.mkdirs()) { |
|||
|
|||
final File saveFile = new File(dir, profileModel.getUsername() + '_' + System.currentTimeMillis() |
|||
+ Utils.getExtensionFromModel(profilePicUrl, profileModel)); |
|||
|
|||
new DownloadAsync(this, |
|||
profilePicUrl, |
|||
saveFile, |
|||
result -> { |
|||
final int toastRes = result != null && result.exists() ? |
|||
R.string.downloader_downloaded_in_folder : R.string.downloader_error_download_file; |
|||
Toast.makeText(this, toastRes, Toast.LENGTH_SHORT).show(); |
|||
}).setItems(null, profileModel.getUsername()).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); |
|||
} else error = 1; |
|||
} else error = 2; |
|||
|
|||
if (error == 1) Toast.makeText(this, R.string.downloader_error_creating_folder, Toast.LENGTH_SHORT).show(); |
|||
else if (error == 2) Toast.makeText(this, R.string.downloader_unknown_error, Toast.LENGTH_SHORT).show(); |
|||
} |
|||
|
|||
@Override |
|||
protected void onDestroy() { |
|||
super.onDestroy(); |
|||
getDelegate().onDestroy(); |
|||
destroyed = true; |
|||
} |
|||
|
|||
@Override |
|||
public boolean onCreateOptionsMenu(final Menu menu) { |
|||
getMenuInflater().inflate(R.menu.menu, menu); |
|||
|
|||
final MenuItem.OnMenuItemClickListener menuItemClickListener = item -> { |
|||
if (item == menuItemDownload) { |
|||
downloadProfilePicture(); |
|||
} |
|||
return true; |
|||
}; |
|||
|
|||
menu.findItem(R.id.action_search).setVisible(false); |
|||
menuItemDownload = menu.findItem(R.id.action_download); |
|||
menuItemDownload.setVisible(true); |
|||
menuItemDownload.setEnabled(false); |
|||
menuItemDownload.setOnMenuItemClickListener(menuItemClickListener); |
|||
|
|||
return true; |
|||
} |
|||
} |
940
app/src/main/java/awais/instagrabber/activities/ProfileViewer.java
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,37 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" |
|||
xmlns:tools="http://schemas.android.com/tools" |
|||
android:layout_width="match_parent" |
|||
android:layout_height="match_parent" |
|||
android:orientation="vertical" |
|||
tools:context=".activities.ProfilePicViewer"> |
|||
|
|||
<include |
|||
android:id="@+id/toolbar" |
|||
layout="@layout/layout_include_toolbar" /> |
|||
|
|||
<FrameLayout |
|||
android:layout_width="match_parent" |
|||
android:layout_height="match_parent"> |
|||
|
|||
<com.github.chrisbanes.photoview.PhotoView |
|||
android:id="@+id/imageViewer" |
|||
android:layout_width="match_parent" |
|||
android:layout_height="match_parent" /> |
|||
|
|||
<androidx.appcompat.widget.AppCompatTextView |
|||
android:id="@+id/imageInfo" |
|||
android:layout_width="wrap_content" |
|||
android:layout_height="wrap_content" |
|||
android:layout_gravity="end" |
|||
android:background="#40000000" |
|||
android:padding="8dp" |
|||
android:visibility="gone" /> |
|||
|
|||
<ProgressBar |
|||
android:id="@+id/progressView" |
|||
android:layout_width="96dp" |
|||
android:layout_height="96dp" |
|||
android:layout_gravity="center" /> |
|||
</FrameLayout> |
|||
</LinearLayout> |
@ -3,7 +3,6 @@ |
|||
<string name="description">Der ursprüngliche Maintainer, AWAiS, entwickelte InstaGrabber als kleine und einfache App mit dem Ziel, Beiträge vom Instagram herunterzuladen. Leider wurde das Projekt aufgegeben und ich, Austin Huang, übernahm die Entwicklung. Die App ist vollständig Open Source, Werbe- und Trackerfrei [abgesehen von dem, was Instagram weiß]. Auch wenn Dir die Downloadfunktion egal ist, [genau so wie mir], ist es immer noch ein großartiger Instagram-Client!\n\nHast du Fragen, [oder andere Anmerkungen]? Kontaktiere mich unter [email protected] oder klicke auf einen der Buttons.</string> |
|||
<string name="action_quickaccess">Schnellzugriff</string> |
|||
<string name="action_about">Über</string> |
|||
<string name="action_notif">Benachrichtigungen</string> |
|||
<string name="action_dms">Direktnachrichten</string> |
|||
<string name="action_setting">Einstellungen (v%s)</string> |
|||
<string name="action_settings">Einstellungen</string> |
|||
|
@ -3,7 +3,6 @@ |
|||
<string name="description">Le mainteneur original, AWAiS, a fait d\'InstaGrabber une petite application personnelle de base avec l\'intention de \"voler\" les messages d\'Instagram. Très malheureusement, elle a été abandonnée et moi, Austin Huang, j\'ai repris le navire. Après tout, cette application est entièrement open source, sans publicité, et sans suivi (en dehors de ce que sait Instagram). Même si vous ne vous souciez pas de télécharger des choses (comme moi), ça reste un excellent client Instagram à utiliser ! Contactez [email protected] ou cliquez sur l\'un des boutons ci-dessous.</string> |
|||
<string name="action_quickaccess">Accès rapide</string> |
|||
<string name="action_about">À propos</string> |
|||
<string name="action_notif">Notifications</string> |
|||
<string name="action_dms">Messages privés</string> |
|||
<string name="action_setting">Paramètres (v%s)</string> |
|||
<string name="action_settings">Paramètres</string> |
|||
|
@ -3,7 +3,6 @@ |
|||
<string name="description">Pengembang original, AWAiS, membuat InstaGrabber sebagai aplikasi personal yang kecil dan sederhana untuk men[cu-]ngunduh kiriman di Instagram. Sayangnya, dia pergi dan saya, Austin Huang, mengambil alih kendali. [Mari berharap paling nggak sedikit uang.] Toh, aplikasi ini sepenuhnya bersumber terbuka, tanpa iklan, dan tanpa pelacak [disamping apa yang diketahui Instagram]. Meski anda tidak peduli dengan mengunduh kiriman [seperti saya], aplikasi ini masih menjadi klien Instagram yang bagus untuk digunakan!\n\nAda pertanyaan [atau mau ngobrol]? Hubungi [email protected] atau klik salah satu tombol di bawah ini.</string> |
|||
<string name="action_quickaccess">Akses Cepat</string> |
|||
<string name="action_about">Tentang</string> |
|||
<string name="action_notif">Pemberitahuan</string> |
|||
<string name="action_dms">Pesan Langsung</string> |
|||
<string name="action_setting">Pengaturan (v%s)</string> |
|||
<string name="action_settings">Pengaturan</string> |
|||
|
@ -3,7 +3,6 @@ |
|||
<string name="description">Il manutentore originale, AWAiS, ha reso InstaGrabber una piccola e semplice app personale con le intenzioni di [rub-] scaricare post da Instagram. Sfortunatamente, questo è stato abbandonato e io, Austin Huang, ho preso il timone. [Speriamo che sia almeno un po \'di denaro contante.] Dopotutto, questa app è completamente open source, senza pubblicità e senza tracciamento [a parte ciò che Instagram sa]. Anche se non ti importa di scaricare roba [come me], è comunque un ottimo client Instagram da usare! \n\nFai domande [o vuoi solo parlare]? Contatta [email protected] o fai clic su uno dei pulsanti di seguito.</string> |
|||
<string name="action_quickaccess">Accesso rapido</string> |
|||
<string name="action_about">Riguardo</string> |
|||
<string name="action_notif">Notifiche</string> |
|||
<string name="action_dms">Messaggi Direct</string> |
|||
<string name="action_setting">Impostazioni (v%s)</string> |
|||
<string name="action_settings">Impostazioni</string> |
|||
|
@ -3,7 +3,6 @@ |
|||
<string name="description">Pierwotny opiekun projektu, AWAiS, stworzył InstaGrabber jako małą i podstawową, osobistą aplikację z zamiarem [kradzieży-]pobierania postów z Instagrama. Niestety, projekt został porzucony, a ja, Austin Huang, przejąłem statek. [Miejmy nadzieję, że przyniesie to trochę gotówki.] W końcu ta aplikacja jest w pełni open source, bez reklam i bez śledzenia [poza tym, co wie już o Tobie Instagram]. Nawet jeśli nie zależy ci na pobieraniu rzeczy, nadal jest to świetny klient Instagrama!\n\nMasz pytania [lub po prostu chcesz porozmawiać]? Skontaktuj się ze mną drogą mailową: [email protected] lub kliknij jeden z poniższych przycisków.</string> |
|||
<string name="action_quickaccess">Szybki dostęp</string> |
|||
<string name="action_about">O aplikacji</string> |
|||
<string name="action_notif">Powiadomienia</string> |
|||
<string name="action_dms">Prywatne wiadomości</string> |
|||
<string name="action_setting">Ustawienia (v%s)</string> |
|||
<string name="action_settings">Ustawienia</string> |
|||
|
@ -3,7 +3,6 @@ |
|||
<string name="description">The original maintainer, AWAiS, made InstaGrabber as a small and basic little personal app with intentions of [steali-]downloading posts off Instagram. Very unfortunately, this was abandoned and me, Austin Huang, took over the ship. [Let\'s hope that\'s at least a lil\' bit cash money.] After all, this app is fully open source, ad-less, and tracking-less [aside from what Instagram knows]. Even if you don\'t care about downloading stuff [like me], it\'s still a great Instagram client to use!\n\nGot questions [or just wanna talk]? Contact [email protected] or click one of the buttons below.</string> |
|||
<string name="action_quickaccess">Quick Access</string> |
|||
<string name="action_about">About</string> |
|||
<string name="action_notif">Notifications</string> |
|||
<string name="action_dms">Direct Messages</string> |
|||
<string name="action_setting">Settings (v%s)</string> |
|||
<string name="action_settings">Settings</string> |
|||
|
@ -3,7 +3,6 @@ |
|||
<string name="description">İlk geliştiricisi olan AWAIS, InstaGrabber adında küçük ve basit bir uygulama yaptı. Amacı Instagram paylaşımlarını [çalma-] indirmekti. Ne yazık ki bir süre sonra projeyi bıraktı ve ben, Austin Huang, devraldım. [Umarım biraz para da kazanırım.] Her şeyden önce bu uygulama tamamen açık kaynak kodlu, reklamsız ve gizliliğe önem veriyor [Instagram\'ın zaten bildikleri ayrı konu]. Eğer paylaşım indirmek amacınız olmasa bile [benim gibi], bir Instagram alternatifi olarak kullanmak için bile harika bir uygulama!\n\nSorun varsa ya da sadece konuşmak istiyorsan [email protected] üzerinden ulaşabilir ya da aşağıdaki butonlara tıklayabilirsin. Hatırlatmakta fayda var, Türkçe bilmiyorum.</string> |
|||
<string name="action_quickaccess">Hızlı Erişim</string> |
|||
<string name="action_about">Hakkında</string> |
|||
<string name="action_notif">Bildirimler</string> |
|||
<string name="action_dms">Direkt Mesajlar</string> |
|||
<string name="action_setting">Ayarlar (v%s)</string> |
|||
<string name="action_settings">Ayarlar</string> |
|||
|
@ -3,7 +3,6 @@ |
|||
<string name="description">原作者 AWAiS 将 InstaGrabber 做成了一个小巧玲珑的 Instagram 帖子下载 [写作下载读作剽窃] 程序,不过他跳槽了,所以我(Austin Huang)就把它接了下来。 [希望此举有所值得。] 不管怎样,InstaGrabber 完全开源,无广告,无跟踪 [Instagram 原生跟踪除外],998都不要,你还等啥???\n有问题 [或者只是想谈谈心] ?请联系 [email protected] 或点击下方各按钮。</string> |
|||
<string name="action_quickaccess">快捷通道</string> |
|||
<string name="action_about">关于</string> |
|||
<string name="action_notif">通知</string> |
|||
<string name="action_dms">私聊</string> |
|||
<string name="action_setting">设定 (v%s)</string> |
|||
<string name="action_settings">设定</string> |
|||
@ -209,4 +208,5 @@ |
|||
<string name="crash_title">应用崩溃了</string> |
|||
<string name="crash_descr">糟糕.. 应用崩溃了,不过别担心,你可以向开发者发送错误报告来帮助他修复问题。(:</string> |
|||
<string name="use_amoled_dark_theme">Use AMOLED mode for Dark theme</string> |
|||
<string name="action_notif">动态</string> |
|||
</resources> |
@ -4,7 +4,6 @@ |
|||
<string name="description">The original maintainer, AWAiS, made InstaGrabber as a small and basic little personal app with intentions of [steali-]downloading posts off Instagram. Very unfortunately, this was abandoned and me, Austin Huang, took over the ship. [Let\'s hope that\'s at least a lil\' bit cash money.] After all, this app is fully open source, ad-less, and tracking-less [aside from what Instagram knows]. Even if you don\'t care about downloading stuff [like me], it\'s still a great Instagram client to use!\n\nGot questions [or just wanna talk]? Contact [email protected] or click one of the buttons below.</string> |
|||
<string name="action_quickaccess">Quick Access</string> |
|||
<string name="action_about">About</string> |
|||
<string name="action_notif">Notifications</string> |
|||
<string name="action_dms">Direct Messages</string> |
|||
<string name="action_setting">Settings (v%s)</string> |
|||
<string name="action_settings">Settings</string> |
|||
@ -212,4 +211,6 @@ |
|||
<string name="crash_title">App crashed</string> |
|||
<string name="crash_descr">Oops.. the app crashed, but don\'t worry you can send error report to the developer to help him fix the issue. (:</string> |
|||
<string name="use_amoled_dark_theme">Use AMOLED mode for Dark theme</string> |
|||
<string name="action_notif">Activity</string> |
|||
<string name="license" translatable="false">InstaGrabber\nCopyright (C) 2019 AWAiS\nCopyright (C) 2020 Austin Huang, Ammar Githam\n\nThis 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. See https://www.gnu.org/licenses/.\n\nTHIS SOFTWARE IS PROVIDED BY THE AUTHOR \'\'AS IS\'\' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nSee project page for third-party attributions.</string> |
|||
</resources> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue