An Android app for browsing Stack Overflow and other Stack Exchange sites.

Overview

Stack

Build

Stack

Stack is an Android application that lets you browse stackoverflow.com and other Stack Exchange sites. It is powered by the Stack Exchange API.

Download

Get it on Google Play

Development

The goal of this project is to provide examples for the latest Android libraries and tools. A few noteworthy examples include:

Features

  • View questions, answers, and comments with rich Markdown previews
  • Switch to any Stack Exchange site
  • Log in to vote for questions or post new questions and answers (Saving drafts supported)
  • Bookmark questions to save for later (Supports offline)
  • Search for questions with advanced filter controls
  • View other users' profiles
  • Dark mode
  • Question deep linking

Subprojects

Here you can also find a few useful Gradle modules as well:

License

Copyright (C) 2020 Tyler Wong

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 https://www.gnu.org/licenses.
Comments
  • "Network error"

    Describe the bug When I open Stack app, I cannot browse anything because it says "Network error"

    To Reproduce Steps to reproduce the behavior:

    1. Open Stack app
    2. Press on a post
    3. "Network error" Screenshot_20201021-145806_Stack

    Expected behavior Load the content

    Screenshots If applicable, add screenshots to help explain your problem.

    Device Info (please complete the following information):

    • Device: Note 8
    • OS: Android 8.0
    • Browser: N/A
    • Version: 1.0.2 (12)

    Additional context This issue didn't exist when I first installed it

    bug 
    opened by XPMai 11
  • Download the solution OFFLINE

    Download the solution OFFLINE

    This add-on will solve the problem of using the Stack website from a computer Download the solution as a text file to copy into the IDE on the computer directly

    enhancement hold 
    opened by ghost 8
  • Login not working

    Login not working

    Describe the bug Login does not work.

    To Reproduce Steps to reproduce the behavior:

    1. Install the app from the Play Store
    2. Go to settings and click log in
    3. Submit the StackOverflow login form
    4. Try submitting the OAuth2 form
    5. Observe that nothing happens
    6. Go back
    7. Click log in again
    8. Observe a blank page

    Expected behavior

    • At the first attempt, the OAuth2 form would ideally succeed or show an error instead
    • At the second attempt, the OAuth2 form would show up

    Screenshots

    Device Info (please complete the following information):

    • Device: Xiaomi Mi 8
    • OS: Android 11
    • Browser: Kiwi
    • Version: latest

    Additional context

    bug 
    opened by KaKi87 4
  • #56 Add Shared Element Transition for Profile Picture

    #56 Add Shared Element Transition for Profile Picture

    Added a handler to deal with the clicks inside the OwnerView. The MainActivity is implementing the interface and deal with the navigation properly. Also, added a transition_name at owner_view and profile_header

    opened by victorvicari 4
  • No Fallback for Opening Links if Browser is Not Present

    No Fallback for Opening Links if Browser is Not Present

    Describe the bug For devices that do not have any browser installed/enabled, there needs to be a fallback for opening web links from within the app:

    Fatal Exception: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=https://stackoverflow.com/... (has extras) }
           at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:2241)
           at android.app.Instrumentation.execStartActivity(Instrumentation.java:1895)
           at android.app.Activity.startActivityForResult(Activity.java:5205)
           at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:568)
           at android.app.Activity.startActivityForResult(Activity.java:5163)
           at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:554)
           at android.app.Activity.startActivity(Activity.java:5534)
           at androidx.core.content.ContextCompat.startActivity(ContextCompat.java:251)
           at androidx.browser.customtabs.CustomTabsIntent.launchUrl(CustomTabsIntent.java:376)
           at me.tylerbwong.stack.ui.utils.CustomTabsHelperKt.launchCustomTab(CustomTabsHelperKt.java:34)
           at me.tylerbwong.stack.ui.MainActivity$showLogInDialog$1.onClick(MainActivity.java:250)
           at androidx.appcompat.app.AlertController$ButtonHandler.handleMessage(AlertController.java:167)
           at android.os.Handler.dispatchMessage(Handler.java:107)
           at android.os.Looper.loop(Looper.java:214)
           at android.app.ActivityThread.main(ActivityThread.java:7682)
           at java.lang.reflect.Method.invoke(Method.java)
           at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
    

    This breaks login and other web links throughout the app.

    To Reproduce Steps to reproduce the behavior:

    1. Remove/Disable all internet browsers on any device
    2. Open Stack
    3. Attempt to Login

    Expected behavior The app should fallback to an internal WebView.

    bug 
    opened by tylerbwong 3
  • Crashes on opening some links

    Crashes on opening some links

    Not sure why anyone would go to it instead of just opening the app, but the app crashes nonetheless.

    Reproduce:

    1. Open web browser
    2. Google search "stackoverflow."
    3. Select one of the sublinks under the official website, ie. "Questions"
    4. ??
    5. Crashes

    It happens with other sublinks as well.

    bug 
    opened by cdubthecoolcat 2
  • Bump svelte from 3.46.4 to 3.49.0 in /static

    Bump svelte from 3.46.4 to 3.49.0 in /static

    Bumps svelte from 3.46.4 to 3.49.0.

    Changelog

    Sourced from svelte's changelog.

    3.49.0

    • Improve performance of string escaping during SSR (#5701)
    • Add ComponentType and ComponentProps convenience types (#6770)
    • Add support for CSS @layer (#7504)
    • Export CompileOptions from svelte/compiler (#7658)
    • Fix DOM-less components not being properly destroyed (#7488)
    • Fix class: directive updates with <svelte:element> (#7521, #7571)
    • Harden attribute escaping during SSR (#7530)

    3.48.0

    • Allow creating cancelable custom events with createEventDispatcher (#4623)
    • Support {@const} tag in {#if} blocks #7241
    • Return the context object in setContext #7427
    • Allow comments inside {#each} blocks when using animate: (#3999)
    • Fix |local transitions in {#key} blocks (#5950)
    • Support svg namespace for {@html} (#7002, #7450)
    • Fix {@const} tag not working inside a component when there's no let: #7189
    • Remove extraneous leading newline inside <pre> and <textarea> (#7264)
    • Fix erroneous setting of textContent for \<template> elements (#7297)
    • Fix value of let: bindings not updating in certain cases (#7440)
    • Fix handling of void tags in <svelte:element> (#7449)
    • Fix handling of boolean attributes in <svelte:element> (#7478)
    • Add special style scoping handling of [open] selectors on <dialog> elements (#7495)

    3.47.0

    • Add support for dynamic elements through <svelte:element> (#2324)
    • Miscellaneous variable context fixes in {@const} (#7222)
    • Fix {#key} block not being reactive when the key variable is not otherwise used (#7408)
    • Add Symbol as a known global (#7418)

    3.46.6

    • Actually include action TypeScript interface in published package (#7407)

    3.46.5

    • Add TypeScript interfaces for typing actions (#6538)
    • Do not generate unused-export-let warning inside <script context="module"> blocks (#7055)
    • Do not collapse whitespace-only CSS vars (#7152)
    • Add aria-description to the list of allowed ARIA attributes (#7301)
    • Fix attribute escaping during SSR (#7327)
    • Prevent .innerHTML optimization from being used when style: directive is present (#7386)
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 1
  • Text disappears when screen rotates

    Text disappears when screen rotates

    Describe the bug When posting a response, rotate the screen after typing text. The text is deleted.

    To Reproduce Steps to reproduce the behavior: 1.open question 2.click answer 3.type text 4.rotate screen

    Expected behavior Text is not deleted

    Screenshots If applicable, add screenshots to help explain your problem.

    Device Info (please complete the following information):

    • Device: Redmi 5
    • OS: android 8.1.0
    • Browser:
    • Version:

    Additional context Add any other context about the problem here.

    bug 
    opened by svcop3 1
  • Split App Into Common and Play Product Flavors

    Split App Into Common and Play Product Flavors

    Description

    This is the first step in resolving #110. In order to comply with F-Droid's inclusion policy, we must not include closed-source/non-free dependencies in the main app target. This creates two new product flavors:

    • common - Provides no-op implementations of analytics, crash reporting, and automatic in-app app updates. This will be the flavor distributed on F-Droid.
    • play - Includes Google Play services such as Analytics, Crashlytics, and uses the Play Core library for in-app app updates. This will be the flavor distributed on the Google Play Store (existing).

    Checklist

    • [ ] I self reviewed the submitted code
    • [ ] I ran ./gradlew ktlintCheck detekt before submitting this PR
    • [ ] I ran the app on a device/emulator or added unit tests to verify this change
    wip 
    opened by tylerbwong 1
  • Add Ability to Open Question in External Browser

    Add Ability to Open Question in External Browser

    Since Stack doesn't currently support all features of the main website, this would be a nice addition.

    Perhaps a new item in the overflow menu would suffice.

    enhancement 
    opened by tylerbwong 1
  • Answer Draft is Sometimes Not Found

    Answer Draft is Sometimes Not Found

    Describe the bug After saving an answer draft, when clicking it, it shows an empty post answer view.

    To Reproduce Steps to reproduce the behavior:

    1. Save a draft
    2. Go to the question post answer view from a deep link
    3. Draft will not be fetched

    Expected behavior The draft should auto-populate with the saved draft.

    Additional context This has to do with a difference in site parameter.

    bug 
    opened by tylerbwong 1
  • Not showing logged in user after network error

    Not showing logged in user after network error

    I opened the app with the internet disabled, so it showed a network error. After I enabled the internet and clicked retry, it successfully logged me in and loaded questions, but it didn't show that I'm logged in, in the top bar.

    Steps to reproduce the bug:

    1. Make sure that you are logged in
    2. Open the app with internet disabled
    3. Enable the internet and click retry in the snackbar
    4. When you click on the account icon in the status bar, the app will prompt you to login, but if you go to settings, you will see that you are already logged in.

    I'm using Stack version 1.0.4 (14), from Play store.

    opened by pisoj 0
  • Bookmarks Tab is Broken

    Bookmarks Tab is Broken

    As seen in this Stack Exchange post, the Stack Exchange API now returns an empty list for /me/favorites since rolling out their new "Saves" feature.

    It seems they forgot to backport changes to the legacy API so until they do, bookmarks will not show up within the app. I'm hoping they backport functionality as well as add new APIs so existing app versions are not left in the dust. Keeping this issue open for visibility in case anyone comes across this.

    bug 
    opened by tylerbwong 3
  • New post button missing

    New post button missing

    Describe the bug A clear and concise description of what the bug is.

    To Reproduce Steps to reproduce the behavior:

    Just launch the app No new post button in all four tabs Expected behavior A button to create new post

    Device Info (please complete the following information):

    Device: Xiaomi 11 OS: MIUI with Android Version: 1.0.4 There should be a button to create a new question post right? or just i am too dumb to figure out how to add new post

    enhancement 
    opened by gryp92k9 1
  • API 2.3 for Stack Exchange

    API 2.3 for Stack Exchange

    There's a release of a new API version with a few new tools - mostly related to collectives that got released

    Meta post here and API change log here - might be some useful stuff there

    enhancement 
    opened by JourneymanGeek 1
  • Inbox Notifications

    Inbox Notifications

    One of the features of the "official" Stack Exchange android application is notifications of any new messages in your inbox. Unfortunately with the discontinuation of the SE application, there's no way of getting notifications of new inbox items without checking on the main page. We may get web notifications in the future but that lacks the immediacy of being able to check on your phone without explicitly opening a webpage or an app

    The 'official' app is a good place to start for inspiration - Screenshot_20210609-164730

    It gives the title of the question, and part of the text of what's in the inbox. While clicking on it will bring you to the official app, which has a sidebar for it, there might be other ways to implement it - maybe in the home dash board?

    enhancement 
    opened by JourneymanGeek 5
Releases(1.0.4)
  • 1.0.4(Dec 27, 2020)

    New Features

    • Added LaTeX rendering support (Might be unstable so please report an issue if there are any problems)

    Minor Updates

    • Added ability to sort search results
    • Added ability to open question in an external browser

    Bug Fixes

    • Fixed a bug where app would crash in the background
    Source code(tar.gz)
    Source code(zip)
  • 1.0.3(Nov 14, 2020)

    Minor Updates

    • Added Spanish language support
    • Added answer deep link support
    • Added ability to filter sites

    Bug Fixes

    • Fixed the ability to post an answer
    • Fixed a bug where existing work requests would compound over time and cause repeated "Network error"s
    • Fixed a crash if a user had no default web browser installed
    • Fixed a bug where deep links from other sites would sometimes not load
    • Fixed a bug where answer drafts would sometimes not load
    Source code(tar.gz)
    Source code(zip)
  • 1.0.2(Oct 17, 2020)

    Bug Fixes

    • Fixed a bug where an answer with 0 comments would show it had 1 comment
    • Fixed a bug dealing with incorrect window insets for navigation bars
    • Fixed a bug where the last editor name would be incorrectly formatted
    Source code(tar.gz)
    Source code(zip)
  • 1.0.1(Oct 17, 2020)

    Minor updates

    • Added comment count to questions and answers
    • Fixed a bug when removing a bookmark
    • Fixed a bug where the create answer button covers the last answer
    Source code(tar.gz)
    Source code(zip)
  • 1.0.0(Oct 16, 2020)

    Minor updates

    • Fixed a bug when switching between sites
    • Fixed a bug where the current site was sometimes not being displayed properly
    • Added Privacy and Terms links

    Other

    • Internal build infrastructure migrated from CircleCI to GitHub Actions
    Source code(tar.gz)
    Source code(zip)
  • 1.0.0-alpha03(Oct 15, 2020)

    Minor updates

    • View badges on user profiles
    • Re-enable experimental syntax highlighting setting
    • Minor updates to app icon

    Other

    • Library dependencies updated
    Source code(tar.gz)
    Source code(zip)
  • 1.0.0-alpha02(Oct 14, 2020)

    Major updates and new features

    • Offline Bookmark Support
    • minSdkVersion changed to 21
    • New Open Source Libraries Page
    • Added Link to GitHub Repository in Settings

    Other

    • Minor UI updates
    • More Jetpack Compose (Sites, Profile Header)
    • Internal library updates
    Source code(tar.gz)
    Source code(zip)
  • 1.0.0-alpha01(Aug 21, 2020)

    Major updates and new features

    • New bottom navigation layout
    • User login
    • Switch between all Stack Exchange sites
    • New search and filter experience
    • View bookmarked questions (Login required)
    • Answer question support (Login required)
    • Save answer drafts (Login required)
    • Upvote, downvote, or bookmark a question (Login required)
    • Experimental syntax highlighting for code blocks
    • Experimental create question support (Login required)
    • View linked and related questions
    • Improved deep linking support
    • Markdown rendering improvements (table, task list, and strikethrough support)
    • In-app update support

    Other

    • Kotlin 1.4
    • Jetpack Compose (Filters and Create Question)
    • Dagger Hilt
    • Coil Image Loader
    Source code(tar.gz)
    Source code(zip)
  • 0.2.2(Aug 22, 2019)

    General maintenance and improvements

    • New user interface
    • Improves question feed update performance using DiffUtil
    • Fix general dark mode menu theming bugs
    • Internal library updates
    • targetSdkVersion and compileSdkVersion bumped to 29
    Source code(tar.gz)
    Source code(zip)
Owner
Tyler Wong
Tyler Wong
Sample Ktor app using a functional stack

samstack This is a template project you can clone and use as a basis for your own Kotlin based microservices. This application structure is my persona

Sam 6 Nov 16, 2022
Sample Ktor app using a functional stack

samstack This is a template project you can clone and use as a basis for your own Kotlin based microservices. This application structure is my persona

Sam 18 Jul 21, 2022
📒 NotyKT is a complete 💎Kotlin-stack (Backend + Android) 📱 application built to demonstrate the use of Modern development tools with best practices implementation🦸.

NotyKT ??️ NotyKT is the complete Kotlin-stack note taking ??️ application ?? built to demonstrate a use of Kotlin programming language in server-side

Shreyas Patil 1.4k Dec 26, 2022
Kotlin TodoMVC – full-stack Kotlin application demo

Kotlin full stack TodoMVC This project is an example implementation of the TodoMVC app written in Kotlin. More specifically, it's the Kotlin port of t

Gyula Voros 22 Oct 3, 2022
Full stack examples of how to use Hotwire JS in Kotlin services

hotwire-kt A collection of Kotlin examples using the Hotwire JS framework to build interactive web apps with a Kotlin Armeria server backend. Using Ho

Andrew (Paradi) Alexander 9 Dec 14, 2022
Starter project with PEKK stack.

Running the project To run the project, you need to run the server and the frontend. Running the server In the terminal, run ./gradlew narcore-server:

Narbase Technologies 2 Sep 9, 2022
A simple, lightweight, non-bloated redis client for kotlin and other JVM languages

rekt is a lightweight, non-bloated redis client, primarily written for the kotlin programming language, while also supporting other JVM-based languages, such as Java, Scala, and obviously way more.

Patrick 8 Nov 2, 2022
Climby is designed to put climbers in contact with each other

Climby Con el nuevo 'BOOM' de la escalada, se vio la necesidad de crear un app donde los usuarios puedan publicar o unirse a viajes, sin la necesidad

Javier Gómez 1 Jan 10, 2022
Reia is the Redis Pubsub client that Manase uses to communicate with other modules or nodes.

from Mana Reia is a simple wrapper around Lettuce to enable easy usage of its Redis Pubsub client. This library is only intended to be used for sendin

Mana 1 Apr 29, 2022
Relationship-app-android - An app with features aimed towards me and my girlfriend

RelationshipApp Android An Android app with features aimed towards me and my gir

Rostislav Osvald 0 Jan 3, 2022
This is a practice app. An app that you can find random recipes and choose the ones you like.

A food suggestion app like Tinder This is a practice app. In this app, you can find random recipes and choose the ones you like. This is main menu. Yo

Yunus Emre OCAK 4 May 25, 2022
Explore-KiiT-App - An app to simplify the complicated website navigation and keep track of Attendance

KiiT Explore App "An app to simplify the complicated website navigation and keep

Ajay Khatri 17 Oct 12, 2022
Checks for app updates and automatically updates the current app if the new one in local storage have a different version

Silent Android App Update Sample This sample shows how to update Android app silently without user confirmation with a device owner app. It works on A

Hamdi Guerbej 1 May 14, 2022
🔥The Android Startup library provides a straightforward, performant way to initialize components at the application startup. Both library developers and app developers can use Android Startup to streamline startup sequences and explicitly set the order of initialization.

??The Android Startup library provides a straightforward, performant way to initialize components at the application startup. Both library developers and app developers can use Android Startup to streamline startup sequences and explicitly set the order of initialization.

Rouse 1.3k Dec 30, 2022
An Android app that calculates BMI values and results by entering your height and weight

BMICalculator BMI 지수는 소수 한자리까지만 출력됨 BMI 결과의 색상은 하단 이미지뷰의 체형별 결과값의 색상과 같음 참고했던 링크

HYUNJUNEPARK 0 Feb 10, 2022
Framework for Mobile test automation (Native app and Browser) on Android and IOS devices

Appium Mobile Automation Framework Framework for Mobile test automation (Native app and Browser) on Android and IOS devices ?? ?? Quick Start - Appium

Thangaraj 40 Nov 18, 2022